У меня есть вопрос, который кажется мне очень необычным. У меня есть условие, которое не работает должным образом. В частности, у меня естьОператоры условий (< , >) не работают в функции интерполяции gsl
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)'. –