IEEE 754 浮点除法的可逆性

Invertability of IEEE 754 floating-point division

IEEE 754 浮点除法的可逆性是多少?我的意思是标准是否保证如果 double y = 1.0 / x 那么 x == 1.0 / y,即 x 可以一点一点地精确恢复?

yinfinityNaN 的情况明显例外。

显然不是。 1/10 没有代表。你得到一个近似值。反转不会给你 10.

编辑:有很多这样的。任何需要超过 53 位的逆将是其中之一。

有一个简单的测试。在 C 中,您可以针对 10.0 测试 1.0/(1.0/10.0),您会发现它们不相等。

是的,有这样的 IEEE 754 双精度 (*) 值 x x != 1.0 / (1.0 / x)

用这个属性手工构建一个正常值的例子很容易:在C99's hexadecimal notation for floating-point values中写0x1.fffffffffffffp0的那个是这样的1.0 / (1.0 / 0x1.fffffffffffffp0) == 0x1.ffffffffffffep0。很自然地期望 0x1.fffffffffffffp0 是一个反例,因为 1.0 / 0x1.fffffffffffffp0 落在 binade 的开头,那里的浮点数密度较低,因此必须在最里面发生较大的相对误差分配。更准确地说,1.0 / 0x1.fffffffffffffp0 正好落在 0.5 和它的双精度后继者之间的中点之上,因此 1.0 / 0x1.fffffffffffffp0 向上舍入到 0.5 的后继者,具有较大的相对误差。

在十进制%.16e格式中,0x1.fffffffffffffp01.9999999999999998e+000x1.ffffffffffffep01.9999999999999996e+00

(*) 对于任何 IEEE 754 格式

,反函数没有理由在问题中包含 属性