私には非常に珍しいと思われる質問があります。正常に機能しない条件ステートメントがあります。特に、私は
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これによりいくつかの場所が修正されましたが (私はこの機能を複数回使用しています)、すべてではありません。