随笔二十:浮点数

        考虑二进制小数表示的一个简单方法是将一个数表示为形如x/(2^k)的小数。将这个形式表示为二进制的过程是:使用 x 的二进制表示,并把二进制小数点插入从右边算起的第 k 个位置。

        IEEE 浮点表示

        在单精度浮点格式(C语言中的float)中,s、exp 和 frac 字段分别为 1 位、 k = 8 位和 n = 23 位,得到一个 32 位的表示。在双精度浮点表示格式(C语言中的 double)中,s、 exp和 frac 字段分别为 1 位、 k = 11 位 和 n = 52 位,得到一个 64 位的表示。

        将整数值转换成浮点形式对于理解浮点表示很有用。首先写出整数的二进制形式,将小数点向左移动到第一位后,写成 1.[(1...1)(0..0)] * 2 ^ 移动的位数。之后,丢掉开头的 1, 并在末尾增加 n - 移动的位数 个 0,来构造小数字段,得到二进制表示。为了构造阶码字段,将 移动的位数 + 偏移量(E=2^(k-1) -1),将得到的值用二进制表示。加上符号位,得到的二进制值就是该整数的浮点数表示。

        并不是所有整数都能用浮点表示。对于一种具有 n 位小数的浮点格式,给出不能准确描述的最小正整数的公式(因为要想准确表示它需要 n+1 位小数)。假设阶码字段 k 足够大,可以表示的阶码范围不会限制这个问题。

         这个数的二进制表示是:1后面跟着 n 个 0, 其后再跟 1, 得到的值是 2 ^ (n + 1) + 1。


          舍入

          因为表示方法限制了浮点数的范围和精度,浮点运算只能近似地表示实数运算。因此,对于 x, 一般思想是用一种系统的方法,能够找到“最接近的”匹配值,它可以用期望的浮点形式表现出来。这就是舍入(rounding)运算的任务。一个关键问题是在两个可能值的中间确定舍入方向。

          IEEE 浮点格式定义了四种不同的舍入方式。默认的方法是找到最接近的匹配,而其他三种可用于计算上界和下界。

          1) 向偶数舍入

          2) 向零舍入

          3) 向下舍入

          4) 向上舍入

          相似地,向偶数舍入法能够运行于二进制小数。我们将最低位有效位的值 0 认为是偶数,值 1 认为是奇数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值