计算机的错误计算(十一)

摘要  再谈浮点数的表示误差:其舍入并不对应十进制的四舍五入。

       计算机的错误计算(十)讨论了浮点数的表示误差。本节以单精度数为例,说明浮点数的舍入并不完全对应十进制的四舍五入。

       单精度下,二进制数有 24 位二进制有效数字(称为 bit), 并且 2^{24}=16777216 有 8 位整数,所以,一般认为单精度浮点数对应十进制下的 8 位有效数字。

例1.  分析 324189233 在单精度下的输出。

       首先,将其转换为二进制数,这时,它具有29位有效数字:

(324189233)_{10}=(\underbrace{\overbrace{100110101001010111100001}^{24\,\,bits}\overbrace{10001}^{5\,\,bits}}_{29 \,\,bits})_2

由于单精度下计算机只能保留前面的 24位有效数字,所以,接下来分两种情形讨论。

1. 截断

       若将后面的 5 位舍弃,也就是全部变为0,则有

(324189233)_{10}\\=(\underbrace{\overbrace{100110101001010111100001}^{24\,\,bits}\overbrace{\textcolor{red}{10001}}^{5\,\,bits}}_{29 \,\,bits})_2\\\approx(\underbrace{\overbrace{100110101001010111100001}^{24\,\,bits}\overbrace{\textcolor{red}{00000}}^{5\,\,bits}}_{29 \,\,bits})_2\\=(324189216)_{10}

2. 进位

       若进位,即将后面的 5 位舍弃,前24位再加1,则变为

(324189233)_{10}\\=(\underbrace{\overbrace{1001101010010101111000\textcolor{red}{01}}^{24\,\,bits}\overbrace{\textcolor{red}{10001}}^{5\,\,bits}}_{29 \,\,bits})_2\\\approx(\underbrace{\overbrace{1001101010010101111000\textcolor{red}{10}}^{24\,\,bits}\overbrace{\textcolor{red}{00000}}^{5\,\,bits}}_{29 \,\,bits})_2\\=(324189248)_{10}

这样,得到两个结果:3241892\textcolor{red}{16} 与 3241892\textcolor{red}{48}

       若分别对它们进行截断与进位,则会获得 4 个结果

\left\{\begin{matrix} 0.3241892\textcolor{red}{1}\,e\,9,\\ 0.3241892\textcolor{red}{2}\,e\,9,\\ 0.3241892\textcolor{red}{4}\,e\,9,\\ 0.3241892\textcolor{red}{5}\,e\,9. \end{matrix}\right.

遗憾的是,它们没有一个与 324189233 的 8 位数近似值相同:

324189233\approx 0.3241892\textcolor{red}{3}\,e\,9.

        另外,若要保留 9位数,则无论如何舍入,总有 2 位错误数字。

        最后总结一句:虽然浮点数具有几种舍入模式,但是,有时其舍入并不对应十进制的四舍五入。

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值