使用双精度浮点精确到2 ^ 53实现整数乘法吗?

时间:2012-12-27 22:04:12

标签: math floating-point linear-algebra lapack double-precision

我问,因为我正在计算矩阵乘法,其中所有矩阵值都是整数。

我想使用LAPACK,以便获得正确的快速代码。将两个大整数(其乘积小于2^53)存储为double时,如果相乘,会产生包含精确整数结果的double吗?

2 个答案:

答案 0 :(得分:6)

您的分析是正确的:

  • -2 53 和2 53 之间的所有整数都可以用双精度表示。
  • IEEE754标准要求精确执行计算,然后四舍五入到最接近的可表示数字。

因此,两个值的乘积等于该范围内的整数将完全表示。

参考What every computer scientist should know about floating-point arithmetic。关键部分是IEEE标准与操作有关的讨论。这包含上面第二个要点的陈述。你已经知道了第一个要点,这是完成论证的第二点。

答案 1 :(得分:4)

是的!双精度数据被分为符号,指数和分数:

Wikipedia has an article explaining the ranges of representable numbers

  

Double Bytes

     

-2 ^ 53和2 ^ 53之间的所有整数都可以双精度表示。

     

在2 ^ 52 = 4,503,599,627,370,496和2 ^ 53 = 9,007,199,254,740,992之间,可表示的数字正好是整数。对于下一个范围,从2 ^ 53到2 ^ 54,一切都乘以2,因此可表示的数字是偶数,等等。相反,对于之前的范围从2 ^ 51到2 ^ 52,间距是0.5等等。