计算机程序设计艺术 卷1:基本算法 1.2.2习题

1.[00] 最小的正有理数是多少?

解:不存在。如果r是正有理数,r/2总是更小的正有理数。

2.[00] 1+0.239999999...是一个十进制展开式吗?

解:假如末尾连续出现无限多个9,就不是十进制展开式。按照式(2),此时对应的十进制展开式为1+0.24000000\cdots

3.[02] (-3)^{-3}是多少?

解:-1/27,但是正文没有对它给出定义。

4.[05](0.125)^{-2/3}是多少?

解:(\frac{1}{8})^{-2/3}=\frac{1}{(\frac{1}{8})^2/3}=\frac{1}{\sqrt[3]{(\frac{1}{8})^{2}}}=\frac{1}{\sqrt[3]{(\frac{1}{2^{3}})^{2}}}=\frac{1}{(\frac{1}{2})^{2}}=4

5.[05]我们通过十进制展开式定义了实数。讨论怎样改用二进制展开式定义实数,并且给出替代式(2)的定义。

解:式(2)

n+\frac{d_{1}}{10}+\frac{d_{2}}{100}+\cdots +\frac{d_{k}}{10^{k}}\leq x<n + \frac{d_{1}}{10}+\frac{d_{2}}{100}+\cdots +\frac{d_{k}}{10^{k}}+\frac{1}{10^{k}}

6.[10] 令x=m+0.d_{1}d_{2}\cdotsy=n+0.e_{1}e_{2}\cdots为实数。基于十进制表示,给出用来判定x=y,x<y还是x>y的规则。

解:一个数的十进制展开式是唯一的,所以当且仅当m=n而且对于所有i\geq 1d_{i}=e_{i}时,x=y。我们可以依次比较m与n,d_{1}e_{1}d_{2}与e_{2},等等,当第一次出现不相等的情况时,较大的数字所在的实数就是\{x,y\}中较大的数。

7.[M23]已知x和y为整数,从式(4)给出的定义出发,证明指数定律。

式(4)b^{0}=1,b^{n}=b^{n-1}b如果n>0b^{n}=b^{n+1}/b  如果n<0

解:可以对x归纳,首先证明x为正数时定律成立,然后证明x为负数是定律成立,细节从略。

8.[25]令m为正整数。证明每个正实数u有唯一的m次正根,做法是给出一种方法,依次构造根的十进制展开式中的n,d_{1},d_{2},\cdots的值。

解:依次令n=0,1,2,\cdots可求出满足n^{m}\leq u < (n+1)^{m}的n值。归纳假设已经求出n,d_{1},\cdots ,d_{k-1},那么d_{k}是满足

(n+\frac{d_{1}}{10}+\cdots +\frac{d_{k}}{10^{k}})^{m} \leq u < (n+\frac{d_{1}}{10}+\dots +\frac{d_{k}}{10^{k}}+\frac{1}{10^{k}})^{m}

的数字。按这种构造方法,对于所有的k>l都不满足d_k=9,因为此情况出现的必要条件是(n+d_{1}/10+\dots+d_{l}/10^{l}+1/10^{l})^{m}\leq u

9.[M23] 假定当x和y为整数时指数定律成立,证明x和y为有理数时指数定律成立。

解:((b^{p/q})^{u/v})^{qv}=(((b^{p/q})^{u/v})^{v})^{q}=((b^{p/q})^{q})^{v}=((b^{p/q})^{u})^{q}=b^{pu}。因此(b^{p/q})^{u/v}=b^{pu/qv}。这证明了第二定律。用第二定律可以证明第一定律:b^{p/q}b^{u/v}=(b^{1/qv})^{pv}(b^{1/qv})^{pv}(b^{1/qv})^{qu}=(b^{1/qv})^{pv+qu}=b^{p/q+u/v}

10.[18] 证明log_{10}2不是有理数。

解:如果,log_{10}2=p/q,其中p和q为正整数,那么2^{q}=10^{p}。而这是不可能的,因为等式右端能被5整除,左端却不能。

11.[10]如果b=10,x\approx log_{10}2,为了确定b^{x}的十进制展开式的前3位小数,我们需要知道多少位精度的x值?[注记:可以利用习题10的结果。]

解:无限多位!如果x的各位数字同log_{10}2一致,无论给出多少位数,我们都不知道10^{x}=1.99999\cdots还是2.00000\cdots这丝毫没有神秘难解或者自相矛盾之处。加法也有类似的情况,假如把0.44444\cdots加到0.55555\cdots上。

12.[02] 解释式(10)为什么可由式(8)推出。

解:d_{1},\cdots, d_{8}只有如此取值才满足等式(7)。

13.[M23] (a)已知x是正实数,n是正整数,证明不等式\sqrt[n]{1+x}-1\leq x/n。(b)利用这个结果解释式(7)后面的说明。

解:(a)首先用归纳法证明:如果y>0,那么1+ny\leq (1+y)^{n}。然后置y=x/n,并且去n次根。(b)x=b-1,n=10^{k}

14.[15] 证明式(12)。

式(12)log_{b}(c^{y})=ylog_{b}c,如果c>0。

解:在(5)的第二个等式中置x=log_{b}c,然后两端同时取对数。

15.[10]证明或证伪:

log_{b}x/y=log_{b}x-log_{b}y,如果x,y>0

解:把“log_{b}y”移到等式的另一端,利用式(11)证明结论成立。

log_{b}(xy)=log_{b}x+log_{b}y,如果x>0,y>0

16.[00] 怎样用lnxln10表示log_{10}x?

解:由式(14),是lnx/ln10

式(14)log_{c}x=\frac{log_{b}x}{log_{b}c}

17.[05] 计算:lg32log_{\pi }\pilnelog_{b}1log_{b}(-1)

解:5;1;1;0;无意义。

18.[10]证明或证伪log_{8}x=\frac{1}{2}lgx

解:原式不成立,log_{8}=lgx/lg8=\frac{1}{3}lgx

19.[20] 如果整数n的十进制表示长14位数,n的值能否存入容量为47个二进制和一个符号位的一个计算机字?

解:是,因为lgn<(log_{10}n)/0.301<14/0.301<47

20.[10] 在log_{10}2log_{2}10之间是否存在简单的关系?

解:它们互为倒数。

21.[15] (对数的对数)用ln lnx,ln ln b,ln b表示log_{b}log_{b}x

解:(lnlnx-lnlnb)/lnb

22.[20](理查德\cdot汉明)证明lgx \approx lnx +log_{10}x。且误差小于1%!(因此利用自然对数表和常用对数表也可以获得二进制对数的近似值。)

解:由附录A的表,lgx\approx 1.442695 ln xlog_{10}x\approx 0.4342945lnx

相对误差\approx (1.442695-1.4342945)/1.442695\approx0.582 %

23.[M25]根据图6,给出lnxy=lnx+lny的几何证明。

解:在图6中,取面积为lny的图形,用x除它的高度,同时用x乘它的长度。这个变形保持它的面积不变,并使它与从ln xy减去ln x剩下的图形全等,因为在lnxy的图中,x+xt点处的高度为1/(x+xt)=(1/(1+t))/x

24.[15] 说明怎样修改本小节最后用于计算以10为底的对数的方法,使之能计算以2为底的对数。

解:用2代换所有10。

25.[22] 假定我们有一台二进制的计算机和一个数x,1\leq x <2。说明利用下面的算法,可以计算y=log_{b}x的近似值,仅需使用同所需精度的小数位数成正比的移位、加法、减法运算:

L1.[初始化] 置y\leftarrow 0,z\leftarrow x右移1位,k\leftarrow 1

L2.[检验算法终结]如果x=1,终止。

L3.[比较]如果x-z<1,置z\leftarrow z右移1位,k\leftarrow k+1,重复这一步。

L4.[减少值]置x\leftarrow x-zz\leftarrow x右移k位,y\leftarrow y+log_{b}(2^{k}/(2^{k}-1)),然后转到L2.

[注记:这个方法同计算机硬件中做除法的方法非常类似。其原始思想要追溯到亨利.布里格斯,他以此方法计算的对数表于1624年出版(当时他用的是十进制而不是二进制)。我们需要一份包含log_{b}2,log_{b}(4/3),log_{b}(8/7)等常数的辅助表,位数要与计算机精度相同。算法有意由数字向右移位引入计算误差,以保证最终x减少到1而使算法终止。这道习题意在说明这个算法为何会终止,为何能计算出log_{b}x的近似值。]

解:注意到z=2^{-p}\left \lfloor 2^{p-k}x \right \rfloor>0,其中p表示精度(小数点后的二进制数的位数)。算法执行时,y+log_{b}x的值基本不变。

26.[M27] 根据算数运算中用到的精度,对于上题算法的固有误差求出一个严格的上界。

解:

27.[M25] 考虑正文中讨论的计算log_{10}x的方法。令x^{'}_{k}表示计算到x_{k}时的近似值,定义如下:x(1-\delta )\leq10^{n}x^{'}_{0}\leq x(1+\epsilon )。在用式(18)计算x^{'}_{k}时,用y_{k}代替(x^{'}_{k-1})^{2},其中(x^{'}_{k-1})^{2}(1-\delta )\leq y_{k} \leq(x^{'}_{k-1})^{2}(1+\epsilon ),且1\leq y_{k}<100。这里\delta\epsilon是很小的常数,反映由于舍入或者截断而产生的误差的上界和下界。如果用log^{'}x表示计算的结果,证明在k步之后有

log_{10}x+2log_{10}(1-\delta )-1/2^{k}<log^{'}x\leq log_{10}x+2log_{10}(1+\epsilon )

解:对k归纳证明:

x^{2^{k}}(1-\delta )^{2^{k+1}}\leq 10^{2^{k}(n+b_{1}/2+\cdots +b_{k}/2^{k})}x^{'}_{k}\leq x^{2^{k}}(1+\epsilon )^{2^{k+1}-1}

并对上式取对数。

28.[M30] (理查德\cdot费曼)建立当0 \leq x <1时计算b^{x}的一种方法,仅使用移位、加法和减法(类似于习题25的算法),并且分析它的精度。

解:下面的解法使用同习题25一样的辅助表。

E1.[初始化。]置x\leftarrow 1-\epsilon -x,y\leftarrow y_{0},k\leftarrow 1,其中1-\epsilon是x可能取的最大值,y_{0}是最接近b^{1-\epsilon }的近似值。(y^{b^{-x}}的值在下列步骤中基本不变。)

E2.[检验算法终结。]如果x=0,终止。

E3.[比较。]如果x<log_{b}(2^{k}/(2^{k}-1)),k增加1,重复这一步。

E4.[减少值。]置x\leftarrow x-log_{b}(2^{k}/(2^{k}-1))y\leftarrow y-(右移k位),然后转到E2。

如果在步骤E1将y取为b^{1-\epsilon }(1+\epsilon _{0}),那么在步骤E4的第j次执行中,由于置x\leftarrow x+log_{b}(1-2^{-k})+\delta _{j}y\leftarrow y(1-2^{-k})(1+\epsilon _{j})\delta _{j}\epsilon _{j}是微小误差,因此就引入了计算误差。算法终结时,计算出y=b^{x-\sum \delta _{j}}\prod _{j}(1+\epsilon _{j})。进一步的分析依赖于b和计算机的字大小。请注意,在本题和习题26中,若改成以e为底,可改进误差估计,因为对于k的多数值,表项ln(2^{k}/(2^{k}-1))可以给出高精度的值:它等于2^{-k}+\frac{1}{2}2^{-2k}+\frac{1}{3}2^{-3k}+\cdots

注记:对应三角函数可给出类似的算法,见约翰\cdot麦基特,IBM J. Res. and Dev. 6(1962),210-226;7(1963),237-245. 令见陈天机,IBM J. Res. and Dev.16(1972),380-388;弗拉季斯拉夫\cdot林斯基,Vychisl.Mat.2(1957),90-119;高德纳,METAFONT:The Program(Reading,Mass.:Addison-Wesley,1986),\S 120-\S 147

29.[HM20] 给定大于1的实数x。(a)实数b>1取什么值时,blog_{b}x取到最小值?(b)整数b>1取什么值时,blog_{b}x取到最小值?(c)整数b>1取什么值时,(b+1)log_{b}x取到最小值?

解:e;3;4。

30.[12]假定n>1且n\neq e,化简表达式(ln n)^{lnn/ ln ln n}

解:n。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jinyongbomatt2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值