可以以浮点格式存储多少个不同的值?

发布于 2024-12-09 06:02:51 字数 127 浏览 0 评论 0原文

我对 IEEE 754-2008 的假设:

binary16 - 2^16 不同的值, binary32 - 2^32 个不同的值, ... binary128 - 2^128 个不同的值。

这是正确的吗?

My assumptions for IEEE 754-2008:

binary16 - 2^16 distinct values,
binary32 - 2^32 distinct values,
...
binary128 - 2^128 distinct values.

Is this correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执妄 2024-12-16 06:02:51

这是一个技巧问题。

浮点格式定义了一些特殊值。您是否认为这些是不同的取决于您的观点。以下是双精度(binary64)的情况:

  1. 0 有两种表示形式:符号位为 0 或 1,指数和尾数均为零。这些值的区别在于 1/+0 = 无穷大和 1/-0 = -无穷大。但他们比较起来是平等的。
  2. 有 2 个无穷大,其中前 12 位为 0x7ff 或 0xfff,尾数全为零。这些不是有限实数,但它们是值。
  3. 存在整个范围的非数字 (NaN) 值,具有符号+指数位 0x7ff(表示 NaN)或 0xfff(“安静”NaN)和非零尾数。同样,这些不是实数,但它们是可区分的值。

因此,总结一下:

  1. 可区分值(实数或其他)的总数是 2^64。
  2. 不同实数的数量(排除无穷大且仅计算零一次)为 2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623

对于binary16,不同实数的数量为2*(2^5-1)*2^10-1 = 63,487。对于binary32,它是2*(2^8-1)*2^23-1=4,278,190,079。对于binary128,它是2*(2^15-1)*2^112-1或大约3.4*10^38

This is a trick question.

The floating-point formats define some special values. Whether you count these as distinct depends on your point of view. The following is for double-precision (binary64):

  1. There are two representations of 0: with the sign bit 0 or 1 and both the exponent and mantissa all zero. The values are distinguishable by the fact that 1/+0 = infinity and 1/-0 = -infinity. But they compare equal.
  2. There are 2 infinities, where the first 12 bits are 0x7ff or 0xfff and the mantissa is all zero. These are not finite real numbers, but they are values.
  3. There is a whole range of Not-A-Number (NaN) values, having sign+exponent bits 0x7ff (signaling NaN) or 0xfff ("quiet" NaN) and a nonzero mantissa. Again, these are not real numbers but they are distinguishable values.

So, to summarize:

  1. The total number of distinguishable values (real numbers or otherwise) is 2^64.
  2. The number of distinct real numbers, excluding infinities and counting zero only once, is 2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623.

For binary16, the number of distinct real numbers is 2*(2^5-1)*2^10-1 = 63,487. For binary32, it's 2*(2^8-1)*2^23-1=4,278,190,079. For binary128, it's 2*(2^15-1)*2^112-1 or about 3.4*10^38.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文