<分区>
谁能用通俗易懂的语言解释一下,当 float 只有 4 个字节时,它怎么可能容纳 3.4E38 这样大的数字?
因为这总共有 32 位,最大的数字是 2E31 + 2E30 + 2E29 + ... + 2E0,相当于 2147483647。那么为什么 float 可以容纳这么大的数字而 int 只能容纳 2147483647 而两者都是几乎相同的 4 个字节大小?
非常感谢您的提前帮助。
标签 c++ floating-point size byte bit
<分区>
谁能用通俗易懂的语言解释一下,当 float 只有 4 个字节时,它怎么可能容纳 3.4E38 这样大的数字?
因为这总共有 32 位,最大的数字是 2E31 + 2E30 + 2E29 + ... + 2E0,相当于 2147483647。那么为什么 float 可以容纳这么大的数字而 int 只能容纳 2147483647 而两者都是几乎相同的 4 个字节大小?
非常感谢您的提前帮助。
最佳答案
您的问题暗示了答案:
How is it possible for float to hold a number as large as 3.4E38
“3.4E38”怎么能用这么少的数字来指代这么大的值呢?好吧,它在 E
的左侧保留一个设定范围内的值 (1 <= 3.4 < 10) - 有效数字的数量较少,并保留指数 “38”
在右边 - 编码 10^38 的乘法 - 这也很容易存储。
float
值做同样的事情,尽管是二进制形式:23 位存储尾数(即“左”值),8 位存储指数;另一位是正负号。
更详细的信息请访问 wikipedia .
我也衷心推荐this online "calculator"它可以让你输入一个像 3.4E38 这样的值,查看二进制表示 (01111111011111111100100110011110),以及存储值的更准确的近似值;您甚至可以切换位并查看它们如何影响存储的值。
关于c++ - 当它只有 4 个字节时,float 怎么可能容纳 3.4E38 这样大的数字呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389215/