CSAPP:浮点数
作者:互联网
二进制小数:小数点右边的部分表示2的负幂。
形如0.111111111111…1(2)的数表示的是刚好小于1的数,我们将用简单的1.0-ε来表示。很多十进制的小数不能准确的用二进制小数来表示。
IEEE浮点格式:用 V=(-1)^s*M*2^E 的形式来表示一个数。
- 符号位:s决定是正数还是负数。对于数值0,容许+0和-0的同时存在。s的长度是1位
- 尾数:M是一个二进制小数的,范围在1~2-ε之间。编码frac的长度是k位。
- 阶码:这个权重是2的E次幂,E可能是负数。编码exp的长度是n位。
在单精度浮点中,s=1,k=8,n=23,得到一个32位的表示;在双精度浮点中,s=1,k=11,n=52,得到一个64位的表示。
情况1:规格化的值
当exp的位模式不全为0且不全为1时,属于此情况。
此时,阶码exp字段被解释为以偏置形式表示的有符号整数。也即,直接解码的值为e,满足实际幂次E=e-bias。其中偏置bias=2^(k-1)-1,效果是使最小的幂次编码为000…001,而最大的编码为11111…110,进而可以按照无符号数的方法直接进行比较。
小数字段frac被解释为描述小数值f,即 0<f<1 ,尾数定义为M=f+1。(这样可以多一个精度位)
规格化的值能表示的最小绝对值为最小frac和最小exp
情况2:非规格化的值
当阶码域全为0时,属于此情况。
可以用于表示特别接近于0的数。(规格化的值M必须大于1,无法表示0)
在此情况,尾数M=f,不包含小数点前的1,阶码值是1-bias(为了和规格化的最小值无缝对接)
情况3:特殊值
阶码全为1,当小数域全为0时,得到的值是无穷,正负由符号位决定。当小数位不全为0时,结果值为NaN。
这些处理使得浮点数可以使用整数排序函数来排序。
舍入:向上,向下,向0,向偶数(IEEE浮点数采用)
向偶数舍入可以防止出现统计偏差。
最低有效位+中间值判定。偏离中间值的数舍入最近的偶数,中间值应倾向于使最低有效位为偶数。
浮点运算:加法具有交换律,但不具有结合律。乘法具有交换律,不具有结合律和分配律。加法和乘法都具有单调性(由于对溢出处理的不同)
标签:表示,阶码,CSAPP,规格化,浮点数,偶数,exp,小数 来源: https://www.cnblogs.com/Philematology/p/15331790.html