【发布时间】:2017-04-08 17:16:03
【问题描述】:
我一直认为 double 类型的变量可以存储 2^64 个不同的小数值。 (每个位可以有 1 或 0 作为值,因此有 2^64 个不同的值)。
最近我知道 NaN(不是数字)有一个表示形式,其中指数部分是 11111111111,有效数字部分是任何非零值。 相反,如果指数部分是 11111111111 并且有效数字部分是 111111......(52 次),那么表示是 NaN 吗?
这不能让我们代表 2^52 多个不同的数字吗? 2^52 是一个巨大的数字。那么我们不是在浪费宝贵的空间吗?
【问题讨论】:
-
首先,您的意思是 2^52 - 1。其次,请说明您提问的目的。
-
2^52 大约是正常数字计数的十分之一。格式必须保持足够简单,以便硬件实现。
-
是的,价值很小,但仍然不浪费。因为它在非常大的数字中占很小的比例。为了检查值是否为 Inf,他们可能会检查指数是否全为 1,以及尾数是否全为零,可能带有一些 OR 门。所以同样地,对于 NaN,检查尾数是否都是使用 AND 门的,对硬件来说一定不是一个严格的限制,对吧? (只是我的猜测)
标签: floating-point precision ieee-754