是否保证除以 10 的幂在浮点运算标准中给出准确的结果)?
Is it guaranteed that division by power of 10 gives accurate result in Floating-point arithmetic standard)?
我发现 9 * 0.0001 = 0.0009000000000000001
,但是 9 / 10_000 = 0.0009
是否保证当您除以 10 的幂时您将得到准确的值(根据 IEEE 754-2019:IEEE 浮点运算标准)
我期待知道浮点标准的具体行为的人来解释是否有这样的保证。
0.009 无法用 IEEE 754 浮点数精确表示。 0.009 的二进制表示为:
0.0000001001001101110100101111000110101001111110111110011101101100100010110100001110010101100000010000011
0001001001101110100101111000110101001111110111110011101101100100010110100001110010101100000010000011
...
小数点后有无穷多个(二进制)数字的有理数
所以这不能用浮点数表示,浮点数在尾数部分只有有限数量的二进制数字可用。
0.009在浮点数中表示如下:
sign exponent mantissa
0 01111000 00100110111010010111100
但是由于这里的二进制序列是有限的,所以实际上代表的是这个数:
0.0089999996125698089599609375....
9/10n
中其他10的正幂也会出现类似的偏差
您可以使用 this tool 进行转换。
我发现 9 * 0.0001 = 0.0009000000000000001
,但是 9 / 10_000 = 0.0009
是否保证当您除以 10 的幂时您将得到准确的值(根据 IEEE 754-2019:IEEE 浮点运算标准)
我期待知道浮点标准的具体行为的人来解释是否有这样的保证。
0.009 无法用 IEEE 754 浮点数精确表示。 0.009 的二进制表示为:
0.0000001001001101110100101111000110101001111110111110011101101100100010110100001110010101100000010000011
0001001001101110100101111000110101001111110111110011101101100100010110100001110010101100000010000011
...
小数点后有无穷多个(二进制)数字的有理数
所以这不能用浮点数表示,浮点数在尾数部分只有有限数量的二进制数字可用。
0.009在浮点数中表示如下:
sign exponent mantissa
0 01111000 00100110111010010111100
但是由于这里的二进制序列是有限的,所以实际上代表的是这个数:
0.0089999996125698089599609375....
9/10n
中其他10的正幂也会出现类似的偏差您可以使用 this tool 进行转换。