深入理解计算机浮点数存储
Posted xxzblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解计算机浮点数存储相关的知识,希望对你有一定的参考价值。
根据IEEE 754 浮点标准
V = (-1)^s * M * 2^E
s: 符号 s决定这数是负数(s=1)还是正数(s=0)
M: 尾数 M是一个二进制小数
E: 阶码 E的作用是对浮点数加权,这个权重是2的E次幂
单精度表示
+---------+----------------+------------------------+
| s | E | M |
+---------+----------------+------------------------+
1 8 23
双精度
+---------+----------------+------------------------+
| s | E | M |
+---------+----------------+------------------------+
1 11 52
根据十进制数计算二进制
4.25 单精度二进制如何表示
表示方法: 整数部分二进制.小数部分二进制
整数部分二进制如何计算:
整数部分除以2取模得到二进制数,得到的整数部分继续除以2取模,直到除以2等于0结束,取模所得整数位继续向左添加。
12
=> 12 / 2 = 6, 12 % 2 = 0
=> 6 / 2 = 3, 6 % 2 = 0
=> 3 / 2 = 1, 3 % 2 = 1
=> 1 / 2 = 0, 1 % 2 = 1
=> 1100
小数部分二进制如何计算:
将十进制的小数部分乘2,将所得结果的整数位作为二进制的位。舍弃乘2所得结果的整数部分,如果剩余部分为0,计算结束。否则继续乘2,进行取整操作(所得整数位继续向右添加)
0.25
=> 0.25 * 2 = 0.5
=> 0.5 * 2 = 1.0
=> 0.01
=> 0100.01
=> 1.0001 * 2^2
=> s = 0, E = 2 + 127, M=000100000000000000000000 (隐藏了整数部分1.)
=> E = 129 => 10000001
完整表示:
0 10000001 000100000000000000000000
根据二进制计算十进制数
0 10000001 000100000000000000000000
10000001
=> 1 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0
=> 128 + 0 + 0 + 0 + 0 + 0 + 0 + 1
=> 129
000100000000000000000000
=> 0 * 2^-1 + 0 * 2^-2 + 0 * 2^-3 + 1 * 2^-4
=> 0.0625
=> -1^0 * (1 + 0.0625) * 2^(129 - 127)
=> 1 * 1.0625 * 4
=> 4.25
以上是关于深入理解计算机浮点数存储的主要内容,如果未能解决你的问题,请参考以下文章