浮点乘以零是否保证产生零?

Tho*_*mas 16 c c++ floating-point

我知道浮点数有舍入错误,但我想知道是否存在某些错误不适用的情况,例如乘以零.

对于所有浮点,任何数字的零次是否为零?

xan*_*tos 22

假:

0f * NAN == NAN
0f * INFINITY == NAN
Run Code Online (Sandbox Code Playgroud)

和......

0f * -1f == -0f (negative 0f), with 0f == -0f :-)
Run Code Online (Sandbox Code Playgroud)

(在Intel,VC++上,可能在任何使用IEEE 754-1985浮点的平台上)

关于ideone的示例(可能在某些Intel兼容平台上使用GCC)

  • 是的,这可以在任何符合IEEE-754的系统上得到保证(但要非常清楚:-0仍然是"零"). (5认同)
  • @StephenCanon在"0f == -0f"的意义上它仍然是"0",但是例如如果你乘以`-0f*INFINITY`并打印结果,你得到`-NaN`,所以它仍然是`0`但可以使用/提取其符号.http://ideone.com/L6MQlQ (2认同)
  • NaN的符号没有意义,因此实际上没有"-NaN"这样的东西,也不能保证`-0*inf`产生"-NaN`"(它可以产生任何安静的NaN值).但是,`-0`的符号可以通过其他方式提取. (2认同)