diff --git a/src/expr.cpp b/src/expr.cpp index eac7f062114826ac3650fff44891672dff2e3f6f..48a2844a14b9e7ffe75113fd7f2bd552042cb6b6 100644 --- a/src/expr.cpp +++ b/src/expr.cpp @@ -616,9 +616,11 @@ void CTree::tree_vec_val( vector<double> *ret, uint k, uint j ) const CContext ctx( k, j ); ctx.set_nv( ret->size() ); tree_val( &val, &ctx ); - if ( !val.is_vector() ) - throw "tree_vec_val got " + val.info(); - (*ret) = val.vd; + if ( val.is_vector() ) + (*ret) = val.vd; + else + for( uint iv=0; iv<ret->size(); ++iv ) + (*ret)[iv] = val.d; } @@ -808,12 +810,17 @@ void NCalc::Calculator() user_xaxparse( s.c_str(), &T ); NOlm::IterateEle iter; CEle *ein; - while ( (ein=iter()) ) { - uint k = iter.SelNo(); - T->tree_point_val( &v, k ); - if ( iter.size()>1 ) - printf( "f%d: ", k ); + if( iter.size()==0 ) { + T->tree_point_val( &v, -1 ); printf("%.12g\n", v); + } else { + while ( (ein=iter()) ) { + uint k = iter.SelNo(); + T->tree_point_val( &v, k ); + if ( iter.size()>1 ) + printf( "f%d: ", k ); + printf("%.12g\n", v); + } } } }