[英]Is floating point multiplication by zero guaranteed to produce zero?
我知道浮點數有舍入錯誤,但我想知道是否存在某些錯誤不適用的情況,例如乘以零。
對於所有浮點,任何數字的零次是否為零?
假:
0f * NAN == NAN
0f * INFINITY == NAN
和......
0f * -1f == -0f (negative 0f), with 0f == -0f :-)
(在Intel,VC ++上,可能在任何使用IEEE 754-1985浮點的平台上)
關於ideone的示例(可能在某些Intel兼容平台上使用GCC)
除了@xanatos的好答案之外, 還要考慮OP的一些中間問題:
我想知道是否存在(舍入)錯誤不適用的某些情況
候選人包括some_double_y = some_double_x * 1.0
和some_double_y = some_double_x + 0.0
可能永遠不會產生舍入錯誤。
然而,即使是那些也是可疑的,因為編譯器可能會以更高的精度評估double
,考慮到FLT_EVAL_METHOD == 2
,其中“評估所有操作和常量到long double
類型的范圍和精度”。 在這種情況下,中間some_double_x
可以作為與表觀double
some_double_x
值0.0
或1.0
不同的long double
some_double_x
存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.