两个“整个”双精度数的乘积能否始终正确表示?

问题描述 投票:0回答:1

这似乎是一个非常基本的问题,但我对浮点数的了解越来越模糊。假设我有两个双精度数(根据 IEEE 754),它们都精确地代表一个整数,例如

10
-1234
。如果我将它们相乘,如果两个数字都是任意精度整数,结果是否也始终是我得到的“正确”结果的精确表示?

floating-point precision
1个回答
0
投票

不。 IEEE-754 二进制 64(“双精度”)将数字表示为 ±F•2e,其中 F 是可用 53 个二进制数字表示的数字。 (有关 F 缩放及其与 e 的关系以及 e 限制的详细信息,本答案中未讨论。)

考虑 252+1。这可以用 53 个二进制数字表示(1 后面跟着 51 个 0,后面跟着 1)。它是一个整数。与自身相乘时,乘积为 2104 + 2•252 + 1 = 2104 + 253 + 1。该数字需要 105 位二进制数来表示,因此无法用二进制64 格式。

© www.soinside.com 2019 - 2024. All rights reserved.