我有一个“x”值数组(PDE 求解器的网格),当我传递给基于这些 x 值填充另一个数组的函数时,涉及一个 x 值的特定表达式无法正确评估。x 值范围是 -1:1,增量为 0.0125,在 x = -0.5 和 x = 0.5 时,我需要以不同于其他值的方式处理这些情况。但是,对于点 x = 0.5,下面的块无法评估为 TRUE(x = -0.5 可以)。这是问题块的精简片段,详细信息如下:
int N = 160;
double delta_x = 0.0125;
const double lims = 0.5 * delta_x;
for(int i = 0; i <= N; i++)
{
if((x[i] < -0.5) || (x[i] > 0.5)) sol[i] = 0;
else if( (abs(x[i] + 0.5) < lims) || (abs(x[i] - 0.5) < lims) ) sol[i] = 0.5;
else sol[i] = 1;
cout << setprecision(30) << "lims: " << lims << ", abs(x[i] - 0.5): " << abs(x[i] - 0.5) << endl;
cout << "sol[" << i << "]: " << sol[i] << endl;
}
这是 x = 0.5 的输出:
lims: 0.00625000000000000034694469519536, abs(x[i] - 0.5): 1.11022302462515654042363166809e-16
sol[120]: 0
因此,看起来当 x = 0.5 时 if 语句中的表达式应该返回 TRUE,即使它当然不精确为 0.5,因为它在范围的“lims”内。有什么想法吗??