23

double(给定字节数,具有合理的尾数/指数平衡)能否始终完全精确地保持该字节数一半的无符号整数的范围?

例如,一个 8 字节的 double 能否完全精确地保存一个 4 字节的 unsigned int 的数字范围?

这将归结为如果一个两字节浮点数可以容纳一字节无符号整数的范围。

一字节的无符号整数当然是 0 -> 255。

4

4 回答 4

44

IEEE754 64 位双精度可以表示任何 32 位整数,因为它有 53 位奇数(a)位可用于精度,而 32 位整数只需要 32 位 :-)

(非 IEEE754 双精度)64 位浮点数的精度低于 32 位是合理的。这将允许真正巨大的数字(由于指数),但以精度为代价。

底线是,如果浮点数的尾数中的精度位比整数中的位多(并且指数中有足够的位来缩放它),那么它可以在不损失精度的情况下表示。


(a)从技术上讲,第 53 位精度是1在序列开头隐含的,因此“可变性”的数量可能只有 52 位。无论是 52 还是 53,仍然足够位来表示每个 32 位整数。

于 2009-04-17T06:08:27.547 回答
7

是的。保证浮点数(或双精度数)准确表示不需要截断的任何整数。对于双精度数,有 53 位精度,因此足以准确表示任何 32 位整数,以及 64 位整数的一小部分(从统计上讲)。

于 2009-04-17T06:09:15.813 回答
2

您可以准确表示的范围取决于您的实现中的许多因素,但您可以通过以下方式来降低它的下限:如果指数字段设置为 0,您可以准确表示宽度为你的尾数字段(假设一个符号位)。对于 IEEE 754 双精度,这意味着您可以精确地表示 52 位数字。通常,您的尾数将超过整个结构宽度的一半。

于 2009-04-17T06:09:37.500 回答
-5

在谈论浮点数时,我不会使用“完全精确”这个词。但是是的,adouble可以表示一个 32 位整数。

我不知道浮点数和整数的其他哪些组合也是如此。

实际上,您不想费心使用高于机器支持的浮点数,因此只需切换到使用 bignums 的有理算术即可。这样,您就可以保证精度。

于 2009-04-17T06:08:55.237 回答