我有一个对我来说似乎很不寻常的问题。我有一个不能正常工作的条件语句。特别是,我有
double maxx = *max_element(v1.begin(), v1.end());
if(x > maxx){
cout << x << "\t" << maxx << endl;
}
哪里v1
是向量。奇怪的是输出:它给了我相等的数字,ig
168.68 168.68
该语句与 gsl 插值函数有关。事实上,它复制了一个interp.c:150
导致错误的语句gsl: interp.c:150: ERROR: interpolation error
。因此,当一个应该正常执行的数字出现在它实际给出的函数true
中时false
,我不知道为什么,因为数字 (x) 实际上等于允许的最大值。
PS:我自己检查了if
声明(带有基本条目),它似乎工作正常。
PPS:一段代码来自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
这修复了一些地方(我不止一次使用这个功能),但不是全部。