代表双打中的整数

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

例如,8字节双精度可以完全精确地保持四字节无符号整数的范围吗?

这将归结为如果一个双字节浮点数可以保持一个字节unsigned int的范围。

一个字节的unsigned int当然是0 – > 255。

IEEE754 64位双精度表示任何32位整数,只是因为它有53位可用于精度,而32位整数只需要32位整数,32 🙂

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

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

是。 保证float(或double)精确表示不需要截断的任何整数。 对于double,有53位的精度,所以这足以精确地表示任何32位整数,并且在64位的整数中也是微小的(统计上说的)比例。

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

有关双精度如何工作的更多详细信息,您可能需要查看此博文: 浮点数的剖析 。

在谈论浮点数时,我不会使用“完全精确”的字样。 但是, double可以表示32位整数。

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

实际上,您不希望在您的机器支持的上方使用浮点,因此只需切换到使用bignums的合理算术。 这样,你就可以保证精确度。