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