IEEE 754浮点除法的可逆性

pla*_*cel 17 c++ floating-point precision floating-accuracy ieee-754

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

当案件yinfinityNaN有明显的例外.

Pas*_*uoq 16

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

这是很容易建立与该属性由手正常值的例子:即是写一个0x1.fffffffffffffp0C99的十六进制表示法为浮点值是这样的1.0 / (1.0 / 0x1.fffffffffffffp0) == 0x1.ffffffffffffep0.很自然地期望0x1.fffffffffffffp0成为一个反例,因为1.0 / 0x1.fffffffffffffp0跌落在二分的开头,浮点数不那么密集,所以在最内部的分裂上必须发生更大的相对误差.更确切地说,1.0 / 0x1.fffffffffffffp0落在0.5它的双精度后继中间点之上,因此1.0 / 0x1.fffffffffffffp0向上舍入到0.5的后继,具有较大的相对误差.

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

(*)反函数没有理由在任何IEEE 754格式的问题中具有属性

  • 这里有一个有趣而且容易证明的事实是(假设避免上溢和下溢,IEEE 754二进制格式,舍入到半舍入等),任何浮点数"x",其分数在[1.0, sqrt(2)]`将具有`1.0 /(1.0/x)== x`的属性. (7认同)