C中的浮点数与预期略有不同

时间:2015-11-27 05:00:05

标签: c floating-point precision

我注意到在C中,浮点数可以小到2 ^ -149,并且可以大到2 ^ 127。如果我试图将浮点数分别设置为小于或大于这些值,那么我分别得到零和inf。 2 ^ 149对我来说没有意义;它来自哪里?

看起来指数是8位,所以我们可以得到2 ^ -128到2 ^ 127。浮点的整体符号是1位,因此有效值留下23位,因为浮点数总共为32位。如果有效数据的所有23位都放在二进制"小数点"之后。如果有效数是< = 0.5,那么我们应该能够有小到2 ^( - 128-23)= 2 ^ -151的浮点数。另一方面,如果23位之一被放置在二进制"十进制"之前。指出有效数是< = 1,那么我们将最小浮点数设为2 ^( - 128-22)= 2 ^ -150。这两个都不同意最小浮点数似乎是2 ^ -149的事实。为什么是这样?

1 个答案:

答案 0 :(得分:0)

无穷大(+或 - )由最大指数(全1位)和零尾数表示。 NaN由最大指数和任何非零尾数表示。

非正规数和零用最小指数(全0位)表示。

因此,这两个指数不适用于正常数字。