我问,因为我正在计算矩阵乘法,其中所有矩阵值都是整数。
我想使用LAPACK,以便获得正确的快速代码。将两个大整数(其乘积小于2^53
)存储为double
时,如果相乘,会产生包含精确整数结果的double
吗?
答案 0 :(得分:6)
您的分析是正确的:
因此,两个值的乘积等于该范围内的整数将完全表示。
参考:What every computer scientist should know about floating-point arithmetic。关键部分是IEEE标准与操作有关的讨论。这包含上面第二个要点的陈述。你已经知道了第一个要点,这是完成论证的第二点。
答案 1 :(得分:4)
是的!双精度数据被分为符号,指数和分数:
Wikipedia has an article explaining the ranges of representable numbers
-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等等。