IEEE 754 浮点格式中,数值范围由以下部分确定:
有效数字范围:
由尾数字段的位数决定。
对于单精度(32 位):2^23 ≈
对于双精度(64 位):2^52 ≈
指数范围:
由指数字段的位数决定。
对于单精度:8 位,范围为 126 到 127
对于双精度:11 位,范围为 1022 到 1023
尾数展开:
IEEE 754 浮点数将尾数存储为归一化小数,其中隐含一个 1 作为最高有效位(MSB)。
浮点数值范围:
对于给定的指数 e 和尾数 m:
正数:(1)^s (1 + m) 2^e
负数:(1)^s (1 + m) 2^e
其中:
s 是符号位(0 表示正数,1 表示负数)
特殊值:
零:指数字段全为 0,尾数字段全为 0
正无穷大:指数字段全为 1,尾数字段全为 0
负无穷大:指数字段全为 1,尾数字段全为 0,符号位为 1
非数字(NaN):指数字段全为 1,尾数字段不全为 0
溢出和下溢:
如果计算结果超过了最大的可表示值,则会发生溢出,导致正无穷大或负无穷大。
如果计算结果小于了最小的可表示值,则会发生下溢,导致零或非数字(NaN)。
浮点数范围
浮点数范围可以使用以下公式计算:
2^(e_min 1) <= |x| < 2^(e_max)
其中:
e_min 是最小指数
e_max 是最大指数
x 是浮点数
对于 IEEE 754 标准中单精度浮点数(float),e_min = 126,e_max = 127。因此,单精度浮点数的范围为:
2^(126) <= |x| < 2^127
有效数字
有效数字是指浮点数中小数点后不为零的数字的个数。对于IEEE 754 标准中的单精度浮点数,有效数字的数量由尾数的位数决定。
尾数的位数为 23 位(不包括隐含的 1)。因此,单精度浮点数的有效数字数量为:
```
log10(2^23) = log10() ≈ 7.22
```
这表示单精度浮点数大约有 7.22 个有效数字。
浮点型数据的取值范围可以通过以下公式计算:
```
最小值 = (1 / ((2^p) 1)) 2^((e_max + 1))
最大值 = (1 (1 / ((2^p) 1))) 2^(e_max)
```
其中:
`p` 是尾数的位数
`e_max` 是指数的最大值
例如,对于单精度浮点(IEEE 754),p = 23,e_max = 127。代入公式,可以得到:
```
最小值 = (1 / ((2^23) 1)) 2^((127 + 1)) = 1.4013e45
最大值 = (1 (1 / ((2^23) 1))) 2^127 = 3.4028e+38
```
IEEE 754 浮点数标准
IEEE 754 浮点数标准定义了浮点数的格式和范围。根据该标准,32 位单精度浮点数(float)的格式如下:
```
符号位 (1 bit) | 指数位 (8 bit) | 尾数位 (23 bit)
```
范围计算
尾数范围:
尾数是一个 23 位的二进制小数,其有效数字范围为 0 到 1,不包括 1。尾数的最高有效位(MSB)始终为 1,这是隐含的,因此没有存储。因此,尾数的范围为:
```
0. (二进制) = 0.0 (十进制)
0. (二进制) = 0. (十进制)
```
指数范围:
指数是一个 8 位的二进制整数,可以是正数或负数。指数的偏置值为 127,这意味着指数范围为 127 到 128(包括端点)。
正数范围:
正数的指数范围为 0 到 254(127 ~ 128)。将指数加 127 以获取实际指数。
负数范围:
负数的指数范围为 126 到 1(127 ~ 126)。将指数加 127 以获取实际指数。
极小正数:
极小正数的指数为 0,尾数为 0。
```
0 = 1.E45 (十进制)
```
极大正数:
极大正数的指数为 254,尾数为 1.
```
0 = 3.E+38 (十进制)
```
极小负数:
极小负数的指数为 126,尾数为 0。
```
1 = 1.E45 (十进制)
```
极大负数:
极大负数的指数为 1,尾数为 1。
```
1 = 3.E+38 (十进制)
```
特殊值:
除了正常数字外,还有以下特殊值:
正无穷: 指数为 255,尾数为 0。
负无穷: 指数为 255,尾数为 1。
非数字(NaN): 指数为 255,尾数为非零。