Pixiv - KiraraShss
浮点数二进制的表示原理
574 字
3 分钟
浮点数二进制的表示原理
算法学习系列文章一。该系列主要用于记录本人算法的学习过程。
本节知识有点晦涩难懂。
浮点数的表示方式
根据IEEE 754标准,一个float类型占据4byte空间,由32个bit位构成。具体的各部分占用情况如下:
符号位(S):占用最高位 (bit 31)。0为正,1为负。
指数位(E):占用8位 (bit 30-23),可视作无符号整型。
分数位(M):占用剩下的23位 (bit 23-0)。
对指数位和分数位的特殊说明如下:
指数位
指数位的8个bit可视作无符号整型。存储范围为0-255.
指数位采用偏移码:实际表示的数为 E - 127 .
部分指数位具有特殊用途:
- E=0 : 非规格化数(次正规数),用于表示无限接近于0的极小数
- 1 <= E <= 254 : 规格化数(一般情况)
- E= 255 : 无穷大 或 NaN
尾数位
尾数位用于存储小数部分。实际尾数为1.M (规格化数)或 0.M (非规格化数).
具体表示形式
对于规格化数
当 1 ≤ E ≤ 254 时:(-1)^S × 1.M × 2^(E-127)
对于非规格化数
当 E=0 且 M≠0 时:(-1)^S × 0.M × 2^(-126)
特殊值
- E=255, M=0:±∞(根据S决定)
- E=255, M≠0:NaN(非数字)
- E=0, M=0:±0(根据S决定)注意浮点数同时包含正负零.
十进制浮点数转换为bit表示方式的过程
- 先将十进制数字转换为二进制数字;
- 将转换后的数字用科学计数法表示;
- 分别得到S、E、M;
- 组合得到bit表示方式.
bit表示转换为十进制浮点数只需逆向运算即可.
一些注意事项
- 非均匀精度!! 越接近0精度越高!!!
- 符号对称:正负范围对称(除NaN)
- 零有正负:+0和-0,但比较时相等
- 精度限制:约6-9位有效十进制数字
- 舍入规则:默认向最近偶数舍入
float类型可以表示的最大数字是3.4*10e28.
这也就是为什么:
- 浮点数的等值比较并不可靠,甚至极小误差的大小比较也不可靠;
- 大数字加上小数字可能导致精度损失.
- 存在溢出可能性.
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
浮点数二进制的表示原理
https://blog.murongpig.site/posts/浮点数二进制的表示原理/