• 计算机中浮点数的表示


    IEEE浮点数表示:

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

    浮点数大小的公式是:(x = (-1)^{s} * 2^E*M)

    规格化值

    (E = exp-(2^{k-1}-1)),将(exp)看作无符号整数,(k)(exp)的位数。

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

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

    例如(frac = 1011_2),那(M = 1_2+0.1011_2 = 1.1011_2 = 1dfrac{11}{16})

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

    非规格化值

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

    (E = 1-(2^{k-1}-1),k)(exp)的位数。

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

    (M = 0.frac)

    特殊值

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

    1. (frac=0)时,浮点数为无穷大
    2. 否则,浮点数为NaN(Not a Number),例如:(sqrt{-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
  • 相关阅读:
    web控件文本框不响应回车事件
    封装的概念
    js 中eval的使用
    C#调用存储过程
    javascript和C#对URI编码
    比较好的博客日历控件
    扩展方法实例
    C# 集合类
    数据访问层的几种数据库连接方式
    aspnetpage分页控件的使用
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/13620662.html
Copyright © 2020-2023  润新知