我正在使用一个双精度数组indata(在堆中,用malloc分配)和一个本地双精度调用sum.
我写了两个不同的函数来比较值indata,并获得不同的结果.最终我确定差异是由于一个函数在条件测试中使用表达式,而另一个函数在同一条件测试中使用局部变量.我希望这些是等价的.
我的功能A使用:
if (indata[i]+indata[j] > max) hi++;
Run Code Online (Sandbox Code Playgroud)
我的功能B使用:
sum = indata[i]+indata[j];
if (sum>max) hi++;
Run Code Online (Sandbox Code Playgroud)
经过相同的数据集之后max,我最终会得到不同的值,hi具体取决于我使用的功能.我认为功能B是正确的,功能A是误导性的.同样,当我尝试下面的代码片段时
sum = indata[i]+indata[j];
if ((indata[i]+indata[j]) != sum) etc.
Run Code Online (Sandbox Code Playgroud)
条件将评估为真.
虽然我理解浮点数不一定能提供精确的表示,但为什么在计算表达式vs存储在变量中时,精确表示会发生变化?建议的最佳做法是在条件之前始终评估这样的双重表达式吗?谢谢!