两个精确表示整数的IEEE 754双精度浮点数相乘结果是否总能精确表示?
IEEE 754双精度整数相乘的精度问题解答
结论:不是总能精确表示。
IEEE 754标准的double类型使用53位有效尾数(包含1位隐藏的最高位),这意味着它能精确表示的整数范围是-2^53到2^53之间的所有整数(2^53的值为9007199254740992)。
当两个能被double精确表示的整数相乘时:
- 如果乘积的绝对值≤
2^53,结果可以被double精确表示,和任意精度整数相乘的结果完全一致; - 如果乘积的绝对值>
2^53,此时乘积的有效位数超过了53位,double类型无法存储完整的有效信息,会进行舍入处理,最终得到的结果和任意精度整数相乘的正确结果存在偏差。
举两个实际例子:
2^27(即134217728)可被double精确表示,两个2^27相乘得到2^54(18014398509481984),这个数超出了2^53的范围,double无法精确存储它;- 整数
3002399751580331和3都能被double精确表示,但它们的乘积是9007199254740993——刚好比2^53大1,double无法精确存储这个数,会被舍入为9007199254740992。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

