【CSAPP】浮点数


浮点数对形如 V = x ∗ 2 y V=x*2^y V=x2y的有理数进行编码。它对表示非常大的数( ∣ V ∣ > > 0 |V|>>0 V>>0)、非常接近 0的数( ∣ V ∣ < < 1 |V|<<1 V<<1),以及实数的 近似运算是很有用的。

小数表示

十进制表示小数
d m d m − 1 . . . d 1 d 0 . d − 1 d − 2 . . . d − n \begin{align} d_md_{m-1}...d_1d_0.d_{-1}d_{-2}...d_{-n} \end{align} dmdm1...d1d0.d1d2...dn
其中每个十进制数字 d i d_i di的取值范围是0 ~ 9,这个表达式所表示的值为:
d = ∑ i = − n m 1 0 i ∗ d i \begin{align} d=\sum_{i=-n}^{m}10^i*d_i \end{align} d=i=nm10idi
小数点左边的数字表示正幂,得到整数值;小数点右边的数字表示负幂,得到小数值。
小数点向移动1位表示d10除;小数点向移动1位表示d乘以10

类似地,二进制表示小数
b m b m − 1 . . . b 1 b 0 . b − 1 b − 2 . . . b − n \begin{align} b_mb_{m-1}...b_1b_0.b_{-1}b_{-2}...b_{-n} \end{align} bmbm1...b1b0.b1b2...bn
其中每个二进制数字(比特位) b i b_i bi的取值是01,这个表达式所表示的值为:
b = ∑ i = − n m 2 i ∗ b i \begin{align} b=\sum_{i=-n}^{m}2^i*b_i \end{align} b=i=nm2ibi
同理,小数点左边的数字表示正幂,得到整数值;小数点右边的数字表示负幂,得到小数值。
小数点向移动1位表示b2除;小数点向移动1位表示b乘以2

形如 0.11... 1 2 0.11...1_2 0.11...12的二进制数表示无限接近1的数。用 1.0 − ε 1.0 - \varepsilon 1.0ε表示。

仅使用有限长度的编码,十进制表示法不能表示像 1 3 、 5 7 \frac{1}{3}、\frac{5}{7} 3175这样的数,它只能表示那些能够被写成 x ∗ 1 0 y x*10^y x10y这样的数。同理,有限长度的二进制编码,只能表示那些能够被写成 x ∗ 2 y x*2^y x2y这样的数。其它的数只能被近似地表示,增加编码的长度可以提升精度。

练习1

填写下表中缺失的信息。

小数值 二进制表示 十进制表示
1 8 \frac{1}{8} 81 0.001 0.125
3 4 \frac{3}{4} 43 0.11 0.75
25 16 \frac{25}{16} 1625 1.1001 1.5625
42 16 \frac{42}{16} 1642 10.1011 2.6875
9 8 \frac{9}{8} 89 1.001 1.125
47 8 \frac{47}{8} 847 101.111 5.875
55 16 \frac{55}{16} 1655 11.0011 3.1875

练习2

十进制数0.1的二进制表示是一个无穷序列:
0.000110011 [ 0011 ] . . . 2 \begin{align} 0.000110011[0011]..._2 \end{align} 0.000110011[0011]...2
方括号里面的部分是无限重复的。

某系统内含一个时钟,类似一个计数器,每0.1秒加1。有一个变量x,该变量用24位二进制编码十进制数0.1x = 0.00011001100110011001100。程序用x乘以这个计数器的值,来以秒为单位确定时间。

  1. 0.1 - x的二进制表示是什么?
    0.000000000000000000000001100 [ 1100 ] . . . 2 0.00000000000000000000
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值