在 C 中,负浮点零是否保证计算结果为 false?

ces*_*sss 1 c floating-point language-lawyer

我知道0.0 == -0.0C 标准所说的if(a)相当于if(a!=0),但是:

保证按标准if(-0.0)评价吗?如果评估为真,false那么实现会出现错误吗?if(-0.0)

我想这里的关键点是是否必须将if(a!=0)的含义理解为与浮点中if(-0.0)完全相同的运算符,在这种情况下可以保证它一定是错误的。!=

Eri*_*hil 5

C 2018 6.8.4.1 指定了语句的行为if及其if \xe2\x80\xa6 else形式。第 2 段说:

\n
\n

在这两种形式中,如果表达式与 0\xe2\x80\xa6 比较不等于,则执行第一个子语句

\n
\n

根据 C 2018 5.2.4.2.2 中的浮点模型第 2 和第 3 段(其中包含数学排版,我不会在这里重现,但说浮点数是通过将符号 +1 或 \xe2\x88\x921 乘以来定义的浮点基数的缩放幂及其每个数字的总和(每个数字均根据其位置进行适当缩放),\xe2\x88\x920 的数学值为零,与 +0 相同,因此比较等于零。因此if (-0.)不会执行第一个子语句。

\n