定点数 / 浮点数
最后更新于:2022-04-02 04:04:56
[TOC]
## 定点数
小数点固定在某个位置的数称之为定点数
- 纯小数:`[符号位][数值位]`,小数点在符号与数值位之间
- 纯整数:`[符号位][数值位]`,小数点在数值位后面
如果要标识一个有整数的小数,需要乘以比例因子
## 浮点数
相对于浮点数的好处
1. 计算机处理的很大程度上不是纯小数或纯整数
2. 数据范围很大,定点数难以表达
### 浮点数的表示格式
类似科学表示法:
`$ N=S\times r^{j} $`
S:尾数
r:基数
j:阶码
表示:`[阶码符号位][阶码数值位][尾数符号位][尾数数值位]`
> 尾数规定使用纯小数,为8位,不够则补齐
示例:
```
11.0101 = 0.110101×2^10 = 0.0110101×2^11
[阶码符号位][阶码数值位][尾数符号位][尾数数值位(8位)]
0 10 0 110101[00] 八位补齐 00
0 11 0 0110101[0] 八位补齐 0
```
### 浮点数的表示范围
假设阶码数值取m位,尾数数值取n位
`$ N=S\times r^{j} $`
`[阶码符号位][阶码数值位][尾数符号位][尾数数值位]`
### 阶码最值
值全是1,能够表示的最大值:`$ 2^{m}-1 $`
最大值取负表示最小值,表示范围:`$ [-(2^{m}-1),2^{m}-1] $`
### 尾数最值
尾数全是1时,为最大值: `$ 1-2^{-n} $`
尾数除最后一位1,其余为0,最小值:`$ 2^{-n} $`
尾数标识范围:`$ [2^{-n},1-2^{-n}] $`
如果考虑符号位 `$ [-(1-2^{-n}),-(2^{-n})] [2^{-n},1-2^{-n}] $`
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a9/f5/a9f5b9cf55be928fc15135c84df3c2e3_2424x1050.png)
最小值:尾数的最小*阶码的最大
最大值:最小的值取反
单精度浮点数:使用4字节、32位来表达浮点数( float )
双精度浮点数:使用8字节、64位来表达浮点数( double )
### 浮点数的规格化
`$ 11.0101=0.110101\times 2^{10} $`
小数位必须是小于1(纯小数)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/57/8e/578efda32349a4daa785c38efb0bb622_2272x1064.png)
## 定点数与浮点数的对比
- 当定点数与浮点数位数相同时,浮点数表示的范围更大
- 当浮点数尾数为规格化数时,浮点数的精度更高
- 浮点数运算包含阶码和尾数,浮点数的运算更为复杂
- 浮点数在数的表示范围、精度、溢出处理、编程等方面均优于定点数
- 浮点数在数的运算规则、运算速度、硬件成本方面不如定点数
> 低成本的CPU会使用定点数
## 溢出判断
- 定点运算双符号位不一致为溢出
- 浮点运算尾数双符号位不一致不算溢出(因为尾数双符号位可以进行右规)
- 浮点运算主要通过阶码的双符号位判断是否溢出(如果规格化后,阶码双符号位不一致,则认为是溢出)
';