diff --git a/pub/CHANGELOG b/pub/CHANGELOG index f3bad889cd76f7a86a1578be468ccae64b71f028..21e01340237e32ea66107b37d9ec13c8d9a3ee3b 100644 --- a/pub/CHANGELOG +++ b/pub/CHANGELOG @@ -2,7 +2,7 @@ Release 2.1.3a - interface changes: - command modifier "=" (overwrite) must now be appended - - calculator mode no longer separate: FRIDA _is_ a pocket calculator + - calculator mode merged with main menu: FRIDA _is_ now a pocket calculator Release 2.1.2a of 20feb11: diff --git a/pub/src/calc.cpp b/pub/src/calc.cpp index 5ed40c8daec7314b70a97cfbf6d0e1d78da5a950..231fd0d05a7b5540b59f321fbef5ab446d9e6e14 100644 --- a/pub/src/calc.cpp +++ b/pub/src/calc.cpp @@ -30,7 +30,7 @@ void NCalc::Calculator( string s ) user_xaxparse( s.c_str(), &T ); NOlm::IterateO fiter; - if( fiter.size()==0 ) { + if( fiter.size()==0 || !T->k_dependent() ) { T->tree_point_val( &ret, &dret ); printf("%.12g", ret); if( dret ) diff --git a/pub/src/edif.cpp b/pub/src/edif.cpp index 9896a9048e5daed35e144eaef313ca31b1f24877..05435a0d4c53f91656183bffcee9ced8e04399f1 100644 --- a/pub/src/edif.cpp +++ b/pub/src/edif.cpp @@ -858,7 +858,7 @@ void NEdif::MakeGrid() S->x.resize(ni); for( uint i=0; i<ni; ++i ) - S->x[i] = ((double)i)/(ni+1); + S->x[i] = ((double)i)/ni; S->y.clear(); S->y.resize( ni, 0. ); diff --git a/pub/src/expr.cpp b/pub/src/expr.cpp index 7a367a633343690d03280b0df309bbc1d0b3754c..6cb6770b9331f4e4c6e5ad8c9a9cb7cee1f24d6b 100644 --- a/pub/src/expr.cpp +++ b/pub/src/expr.cpp @@ -465,6 +465,32 @@ void CTree::npar_exec( uint *np ) const } +//! Does the result depend on k? + +bool CTree::k_dependent() const +{ + bool kd=false; + kdep_exec( &kd ); + return kd; +} + + +//! Implementation with pointer argument to allow recursion. + +void CTree::kdep_exec( bool *kd ) const +{ + if ( typ == _OP || typ == _CONV || typ == _DIRAC ) + for ( uint iarg=0; iarg<narg; ++iarg ) + arg[iarg]->kdep_exec( kd ); + else if ( typ == _VAL || typ == _DUMMY || typ == _CEV ) + ; // do nothing + else if ( typ == _REF ) { + *kd = true; + } else + throw string( "BUG: kdep(UNDEF)" ); +} + + //! Does expression contain dummy argument t ? bool CTree::has_dummy() const diff --git a/pub/src/expr.h b/pub/src/expr.h index 885aa2132dae23ca64a3d7159c064721c3a5cc7a..fd93c0626809821e77a94bfcf3c94059292715aa 100644 --- a/pub/src/expr.h +++ b/pub/src/expr.h @@ -108,6 +108,7 @@ class CTree { static void setConv( uint& kconv, uint& jconv, uint k, uint j ); uint npar() const; + bool k_dependent() const; bool has_dummy() const; void tree_val ( CResult& ret, const CContext& ctx ) const; @@ -125,4 +126,5 @@ class CTree { private: void npar_exec( uint *np ) const; + void kdep_exec( bool *kd ) const; };