Intro(System of numeration) #
进制转换图 #

浮点数 #
按照 IEEE 754 浮点数标准,一般会以四个字节来保存,布局结构图如下:

在谈论计算保存字节值之前先了解一下科学计数法:
在十进制中: \(12302 = 1.2302 * 10^4\), \( 0.00123 = 1.23 * 10^{-3}\)
在二进制中: \(11000 = 1.1 * 2^4\), \( 0.0101 = 1.01 * 2^{-2}\)
将 9.625 这个数改成 IEEE 754 标准的机器数步骤如下:1.确定符号位,正数,所以为 0。2.将十进制转换为二进制:
3.科学计数法规范化:\(1001.101 = 1.001101 * 2^3\)。如果整数为 0,则只计算小数部分,比如(\( 0.625 = 0.101 = 1.01 * 2^{-1}\))4.由步骤 3 可知,exponent = 3。而 IEEE 754 单精度格式使用偏置值 127 来表示指数,所以加上偏置值 \(3 + 127 = 130 = 10000010\)5.组合起来就是: \(0\space 10000010_8\space 00110100000000000000000_{23}\)
Java 代码验证:
科学计数法(Scientific notation) #
标准科学计数法严格规定底数只能是 10,不存在底数为 2 的 “标准科学计数法” 写法。 但在计算机底层,是在以 2 为底的指数表示法。
scientific notation expression real value 1.23e+051.23 × 10⁵ 123000 3.6e-023.6 × 10⁻² 0.036 5e+005 × 10⁰ 5.0 1.752e-131.752 × 10⁻¹³ 0.0000000000001752 9.625000e+009.625 × 10⁰ 9.625 精度丢失过程 #

- 先将 16777216 转化为二进制表示: 1 00000000 00000000 00000000
- 将二进制写成科学计数法:\(1.0 * 2^{24}\)
- 计算 exponent : 24 + 127 = 10010111,外加位数 23 个 0。
- 综上:
0 10010111 0000000 00000000 00000000。
- 先将 16777217 转化为二进制表示: 1 00000000 00000000 00000001
- 将二进制写成科学计数法:\(1.00000000 \hspace{0.5em} 00000000 \hspace{0.5em} 00000001 * 2^{24}\)
- 计算 exponent : 24 + 127 = 10010111,只有23位,只能把最后的1截断,相当于加23个0。
- 综上:
0 10010111 0000000 00000000 00000000。
Reference #
comments powered by Disqus