У меня вопрос, который кажется мне очень необычным. У меня есть оператор условия, который не работает должным образом. В частности, у меня
double maxx = *max_element(v1.begin(), v1.end());
if(x > maxx){
cout << x << "\t" << maxx << endl;
}
где v1
— вектор. Странная вещь - это вывод: он дает мне равные числа, т.е.
168.68 168.68
Это утверждение связано с функцией интерполяции gsl. Фактически, он дублирует оператор в interp.c:150
, что вызывает ошибку gsl: interp.c:150: ERROR: interpolation error
. Поэтому, когда число, которое должно быть выполнено, обычно приходит к функции, оно на самом деле дает true
вместо false
, и я понятия не имею, почему, поскольку число (x) фактически равно максимально допустимому значению.
P.S.: Я проверил оператор if
сам по себе (с элементарными записями), и, кажется, он работает нормально.
P.P.S.: Кусок кода от interp.c
:
double gsl_interp_eval (const gsl_interp * interp,
const double xa[], const double ya[], double x,
gsl_interp_accel * a){
double y;
int status;
if (x < interp->xmin || x > interp->xmax)
{
GSL_ERROR_VAL("interpolation error", GSL_EDOM, GSL_NAN);
}
status = interp->type->eval (interp->state, xa, ya, interp->size, x, a, &y);
DISCARD_STATUS(status);
return y;}
Так он возвращает ошибку даже для x = interp->xmax
, хотя точно не должен.
ОБНОВЛЕНИЕ: я изменил double
на long double
в объявлении. Это исправило некоторые места (я использую эту функцию не раз), но не все.
(x - maxx)
. - person Oliver Charlesworth   schedule 06.03.2013