IEEE 754 浮点除法的可逆性是什么?我的意思是标准是否保证如果double y = 1.0 / x
then x == 1.0 / y
, i.e. x
可以一点一点精确还原吗?
时的情况y
is infinity
or NaN
都是明显的例外。
是的,有 IEEE 754 双精度 (*) 值x
就是这样x != 1.0 / (1.0 / x)
.
使用此属性可以很容易地手动构建一个正常值的示例:所写的那个0x1.fffffffffffffp0
in C99 浮点值的十六进制表示法 http://www.exploringbinary.com/hexadecimal-floating-point-constants/是这样的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.fffffffffffffp0
is 1.9999999999999998e+00
and 0x1.ffffffffffffep0
is 1.9999999999999996e+00
.
(*) 对于任何 IEEE 754 格式,反函数没有理由具有问题中的属性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)