我正在处理一个名为indata
的double数组(在堆中,用malloc分配),还有一个名为sum
的本地double变量。
我编写了两个不同的函数来比较indata
中的值,并获得了不同的结果。最终我确定差异是由于一个函数在条件测试中使用了一个表达式,而另一个函数在同一条件测试中使用了一个本地变量。我希望它们是等价的。
我的函数A使用:
if (indata[i]+indata[j] > max) hi++;
我的函数B使用:
sum = indata[i]+indata[j];
if (sum>max) hi++;
使用相同的数据集和max
后,根据所使用的函数不同,我得到了不同的hi
值。我认为函数B是正确的,而函数A是误导性的。类似地,当我尝试下面的代码片段时:
sum = indata[i]+indata[j];
if ((indata[i]+indata[j]) != sum) etc.
这个条件语句会评估为真。
虽然我知道浮点数不一定提供精确的表示,但为什么当作为表达式进行评估时,这种非准确的表示会改变,而在变量中存储时却不会?建议最佳实践是在条件之前始终评估双精度表达式吗?谢谢!