IEEE 754浮点除法的可逆性

时间:2016-08-01 22:44:09

标签: c++ floating-point precision floating-accuracy ieee-754

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

yinfinityNaN时的情况明显例外。

2 个答案:

答案 0 :(得分:14)

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

手动使用此属性很容易构建一个正常值的示例:C99's hexadecimal notation for floating-point values0x1.fffffffffffffp0编写的1.0 / (1.0 / 0x1.fffffffffffffp0) == 0x1.ffffffffffffep0就是0x1.fffffffffffffp0。期望1.0 / 0x1.fffffffffffffp0成为一个反例是很自然的,因为1.0 / 0x1.fffffffffffffp0落在一个binade的开头,浮点数不那么密集,因此最内层的相对误差必须更大师。更确切地说,0.5恰好位于1.0 / 0x1.fffffffffffffp0与其双精度后继之间的中点之上,因此%.16e向上舍入到0.5的后继,具有较大的相对误差。

采用小数0x1.fffffffffffffp0格式,1.9999999999999998e+000x1.ffffffffffffep01.9999999999999996e+00System.Web.Http.Filters.ActionFilterAttribute

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

答案 1 :(得分:-3)

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

编辑:有很多这些。任何需要超过53位的反转都将是其中之一。

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

相关问题