Processing math: 100%

计算机中浮点数的表示

IEEE浮点数表示:

在C语言中浮点数有两个size,32位和64位。其中32位浮点数:第1位是SignFlag(符号位),2-9位是阶码位(exponent),10-32位是尾数位(significand)。64位分别是第1位,2-12位,13-64位。

浮点数大小的公式是:x=(1)s2EM

规格化值

E=exp(2k11),将exp看作无符号整数,kexp的位数。

例如,对于32位浮点数来说k=8,E[126,127],对于64位浮点数来说k=11,E[1022,1023]

M=1+0.frac,将frac看作小数值。

例如frac=10112,那M=12+0.10112=1.10112=11116

这是通常情况下(规格化值)的计算公式,还有三种特殊情况。

非规格化值

exp=0时,即是非规格化的值,这时:

E=1(2k11)kexp的位数。

例如,对于32位非规格化值k=8E=1(271)=126,对于64位来说k=11E=1(2101)=1022,我们发现非规格化的E和规格化的E的下界相等,这会导致非规格化值到规格化值的平滑转换。

M=0.frac

特殊值

exp位模式全为1时,也就是无符号整数的最大值,这时为特殊值,有两个特殊值:

  1. frac=0时,浮点数为无穷大
  2. 否则,浮点数为NaN(Not a Number),例如:1

舍入

IEEE标准中,由于精度问题,当一个浮点数无法准确表示一个实数时需要进行舍入。所用的方法是向偶数舍入。

用几个例子说明:

数字 舍入后
1.4 1
1.6 2
1.5 2
2.5 2
3.5 4

如果该数字正好在上下界之间,则向偶数舍入,与我们通常的四舍五入略有区别。这样做的好处是:当有一组浮点数放在一起求平均值时可以保证误差最小,因为每个在上下界之间的数字都有百分之五十几率向下舍入,百分之五十几率向上舍入。

对于二进制小数也是如此

二进制小数 舍入后(保留小数点后一位)
10.01 10.0
10.011 10.1
10.11 11.0
11.001 11.0
posted @   hellozhangjz  阅读(1140)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示