浮点 IEEE 保证
Floating point IEEE guarantees
我想知道,对于以下情况,IEEE 标准是否保证使用任何符合标准的 cpu 的所有可能情况(不包括 NaN 和无穷大):
- 交换性:x#y=y#x
- 结合性:(x#y)#z=x#(y#z)
- x - x = 0(x - x == 0.0f 总是 return 正确吗?)
- x * 0 = 0(x * 0.0f == 0.0f 总是 return 正确吗?)
- x * 1 = x(x * 1.0f == x 总是 return 正确吗?)
- x / x = 1.0f(x / x == 1.0f 总是 return 正确吗?当然 x = 0 除外)
(#表示所有操作:+ - * /)
交换性:+
和 *
是有保证的,除非其中一个参数是 NaN
。 -
和 /
不可交换,除以 0.0
根据分子得到 +Inf
、-Inf
或 NaN
。在这里我没有考虑 signed zeros.
关联性。绝对不。两个小数加一个大数是反例。
x - x
是 0
除非 x
是 NaN
、+Inf
或 -Inf
,在这种情况下是 NaN
.
x * 0
是 0
除非 x
是 NaN
、+Inf
或 -Inf
,在这种情况下是 NaN
.
x * 1
是 x
除非 x
是 NaN
在这种情况下它是 NaN
.
x / x
是 1
除非 x 是 0.0
、+Inf
、-Inf
或 NaN
,其中如果是 NaN
.
注意 (5) 的细微差别。
我想知道,对于以下情况,IEEE 标准是否保证使用任何符合标准的 cpu 的所有可能情况(不包括 NaN 和无穷大):
- 交换性:x#y=y#x
- 结合性:(x#y)#z=x#(y#z)
- x - x = 0(x - x == 0.0f 总是 return 正确吗?)
- x * 0 = 0(x * 0.0f == 0.0f 总是 return 正确吗?)
- x * 1 = x(x * 1.0f == x 总是 return 正确吗?)
- x / x = 1.0f(x / x == 1.0f 总是 return 正确吗?当然 x = 0 除外)
(#表示所有操作:+ - * /)
交换性:
+
和*
是有保证的,除非其中一个参数是NaN
。-
和/
不可交换,除以0.0
根据分子得到+Inf
、-Inf
或NaN
。在这里我没有考虑 signed zeros.关联性。绝对不。两个小数加一个大数是反例。
x - x
是0
除非x
是NaN
、+Inf
或-Inf
,在这种情况下是NaN
.x * 0
是0
除非x
是NaN
、+Inf
或-Inf
,在这种情况下是NaN
.x * 1
是x
除非x
是NaN
在这种情况下它是NaN
.x / x
是1
除非 x 是0.0
、+Inf
、-Inf
或NaN
,其中如果是NaN
.
注意 (5) 的细微差别。