use*_*723 6 java memory-management
查看Java(但在其他语言中可能类似或相同),long和double都使用8个字节来存储值.
long使用8个字节来存储从-9,223,372,036,854,775,808到9,223,372,036,854,775,807的长整数
double使用8个字节来存储从-1.7E308到1.7E308的双精度浮点数,最多16位有效数字.
我的问题是,如果两个字节使用相同的字节数(8个字节或2 ^ 64),那么如何双重存储更长的数字?1.7E308比9,223,372,036,854,775,807大得多.
您可以以64位存储的绝对信息量当然是相同的.
您为位分配的含义有何变化.
在一个integer或一个long变量中,使用的编码与你在正常生活中用于十进制数的编码相同,除了使用二号补码的事实,但这并没有改变那么多,因为它只是一个获得的技巧一个额外的数字(只存储一个零,而不是正面和负面).
在float或double变量中,位分为两种:尾数和指数.这意味着每个双数字的形状就像XXXXYYYYY它的数值是这样的XXXX*2^YYYY.基本上你决定用不同的方式对它们进行编码,你得到的是你有相同数量的值但是它们在整个实数集上以不同的方式分配.
浮点数的最大/最小值大于/小于整数的最大/较小值这一事实并不意味着对有效存储的数据量有任何影响.
本质上,双精度型可以通过在它可以存储的数字之间具有更大的间隔来存储更大的数字。并非双精度范围内的每个整数都可以由该双精度表示。
更具体地说,双精度数有 1 位 (S) 用于存储符号,11 位用于存储指数 E,以及 52 位精度,即所谓的尾数 (M)。
对于大多数数字(有一些特殊情况),双精度数存储数字 (-1)^S * (1 + (M * 2^{-52})) * 2^{E - 1023},因此,当E很大时,将M改变1将使结果数的大小发生比1大得多的变化。这些巨大的差距使得双打的范围比多头更大。
| 归档时间: |
|
| 查看次数: |
2452 次 |
| 最近记录: |