欢迎大家来到IT世界,在知识的湖畔探索吧!
浮点数是什么
浮点数是计算机中一种表示实数的数值类型,由尾数和指数组成。浮点数的表示形式有点类似于科学计数法,比如:6.19 × 10 ^ 3。浮点数 IEEE 754 标准是计算机中一种常用的浮点数标准,该标准定义了单精度和双精度浮点数的表示方法。
|
精度 |
位数 |
符号位(S) |
指数(E) |
尾数(M) |
偏移值 |
|
单精度 |
32 位 |
1 |
8 |
23 |
127 |
|
双精度 |
64 位 |
1 |
11 |
52 |
1023 |
规格化数实际值的公式如下:
欢迎大家来到IT世界,在知识的湖畔探索吧!
除此之外,还有一种不常用的半精度,它的表示如下:
半精度(16位):
- 符号位(S):1位
- 指数(E):5位(偏移值 15)
- 尾数(M):10位(隐含小数点前面的 1)
浮点数加减法运算的流程
- 预处理
- 若任一操作数为0,直接返回另一个操作数。
- 对特殊值进行处理(比如NaN、Infinity)。
- 对阶操作(Exponent Alignment)
- 比较两数的指数部分的值,将较小指数的数尾数进行右移操作,直到两数指数部分相等。
- 右移位数:
可能的精度损失:右移导致低位精度丢失,可能引入舍入误差。
例:1.01×2^3 + 1.01×2^1 → 对齐后变为: 1.01 000×2^3 + 0.001 01×2^3
欢迎大家来到IT世界,在知识的湖畔探索吧!
对阶操作为什么是右移:如果大阶对小阶,则尾数的数值部分的高位需移出,而小阶对大阶移出的是尾数的数值部分的低位,这样损失的精度更小
- 符号判断和尾数运算
根据符号位决定尾数加减操作:
- 同号:绝对值相加,符号维持不变。
- 异号:绝对值相减,结果符号为绝对值大的数符号。
- 规格化(Normalization)
- 左规:若结果形如 00.01xx,需左规操作。
- 右规:若运算产生进位(如 10.xx ),需右规操作。
欢迎大家来到IT世界,在知识的湖畔探索吧!例如:结果为 10.01×2^3 → 右移后变为 1.001×2^4
- 舍入(Rounding)
IEEE 754标准有四种处理多余位的模式:
- 就近舍入(默认)
- 向零舍入
- 正向无穷舍入
- 负向无穷舍入
例如(单精度): 尾数 1.000000000001(24位) 就近舍入后,保留23位:1.00000000001
- 溢出与下溢处理
- 上溢(Overflow):指数超过最大值 → 将其标记为 ± Infinity。
- 下溢(Underflow):指数过小(精度不够) → 转为非规格化数或 0 。
运算示例
以下面的运算为例:(+0.5) + (-0.4375)
- 转为 IEEE754 浮点数格式:
欢迎大家来到IT世界,在知识的湖畔探索吧!0.5 -> 0, 0 000... -0.4375 -> 1 0 110...
- 对阶:
指数差1,右移后者尾数1位 → 1.110 → 0.1110
- 尾数运算:
欢迎大家来到IT世界,在知识的湖畔探索吧!1.000... - 0.1110... = 0.0010...
- 规格化:
左移2位 → 1.000... × 2 ^ -3
- 结果:
欢迎大家来到IT世界,在知识的湖畔探索吧!0 0 000... -> 0.0625
扩展 —— 浮点数特殊数值表示
|
值的类型 |
符号 |
阶码 |
尾数 |
值 |
|
正零 |
0 |
0 |
0 |
0 |
|
负零 |
1 |
0 |
0 |
0 |
|
正无穷 |
0 |
全1 |
0 |
∞ |
|
负无穷 |
1 |
全0 |
0 |
-∞ |
|
无定义数(非数) |
0或1 |
全1 |
≠0 |
NaN |
|
规格化非零正数 |
0 |
0 ~ 2 ^ E-1 |
f |
2^(e-偏移值)(1.f) |
|
规格化非零负数 |
1 |
0 ~ 2 ^ E-1 |
f |
-2^(e-偏移值)(1.f) |
|
非规格化正数 |
0 |
0 |
f≠0 |
2^-(偏移值-1)(0.f) |
|
非规格化负数 |
1 |
0 |
f≠0 |
-2^-(偏移值-1)(0.f) |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/131994.html