diff --git a/pub/lib/fit.cpp b/pub/lib/fit.cpp index c8029ea1ec6c01d931c6525675a1e03f02d0f801..edad512e23f23a92590cd226c59200dd0dea15c1 100644 --- a/pub/lib/fit.cpp +++ b/pub/lib/fit.cpp @@ -82,7 +82,7 @@ static void compute_residues( for ( int i=0; i<n; i++) { if( !isfinite(cu->to_r(i)) ) - throw S("function evaluation returns infinite value"); + throw "infinite function value at x[" + S(i) + "]=" + S(s->x[i]); if ( wt==COlc::_LIN ) { fvec[mdat+i] = s->y[i] - cu->to_r(i); diff --git a/pub/lib/slice.cpp b/pub/lib/slice.cpp index e20b9b73b761885a65dff29cb8e7f33ee8d4683c..fda72fad726c4fb2e62adcb8dcde9dc075c1fc81 100644 --- a/pub/lib/slice.cpp +++ b/pub/lib/slice.cpp @@ -8,6 +8,7 @@ //! \brief CSlice handles z dependent data, is base class for CSpec, CCurve. +#include <iostream> #include <vector> #include <string> #include <algorithm> @@ -183,7 +184,8 @@ void CSpec::intpol( const vector<double>& xx, vector<double>* yy, vector<double> for( int ii=0; ii<nn; ++ii ) { (*yy)[ii] = 0; - (*dd)[ii] = 0; + if(dd) + (*dd)[ii] = 0; } int i = 0, ii = 0; while ( i<n-1 && xx[ii]<x[n-1] ) { @@ -194,6 +196,9 @@ void CSpec::intpol( const vector<double>& xx, vector<double>* yy, vector<double> if( ii>=nn ) return; (*yy)[ii] = ( (x[i+1]-xx[ii])*y[i] + (xx[ii]-x[i])*y[i+1] )/(x[i+1]-x[i]); + if( !isfinite((*yy)[ii]) ) { + std::cout << "TROUBLE " << i << " " << ii << "\n"; + } if( dd ) (*dd)[ii] = sqrt( (x[i+1]-xx[ii])*SQR(dy[i]) + (xx[ii]-x[i])*SQR(dy[i+1]) ) / (x[i+1]-x[i]);