小编sti*_*ing的帖子

C基础:双变量不等于双重表达式?

我正在使用一个双精度数组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存储在变量中时,精确表示会发生变化?建议的最佳做法是在条件之前始终评估这样的双重表达式吗?谢谢!

c floating-point syntax expression floating-accuracy

8
推荐指数
1
解决办法
214
查看次数