补充题
在MATLAB上执行>> 5.1-5-0.1和>> 1.5-1-0.5,给出执行结果,并简要分析一下产生现象的原因
代码:
>> x1=5.1-5-0.1
x1 =
-3.608224830031759e-16
>> x2=1.5-1-0.5
x12=
0
原因:
浮点数表示时数字时位数有限,以双精度浮点数为例,共64位。
对于5.1,符号位一位,指数位11,整数部分占3位,小数部分0.1不能精确表示只能近似用49位表示。5.1-5-0.1,5被精确表示,0.1则用52位近似表示。故5.1中的小数部分0.1在计算机中比0.1小,最后结果为负。而x2=1.5-1-0.5中,所有的数都被精确表示了,故其结果为0.
p.153第1题
(1)
(一)程序设计
1.算法
2.说明事项
1)I0必须取得精确值,利用
2)计算出I0后利用循环即可计算出I20
(二)源程序
function [ y ] = test1_1( n )
y=log(1.2);
for i=1:1:n
y=-5*y+1/i;
end
(三)实验结果
>> test1_1(20)
ans =
4.242637044921560e-03
(2)
(一)程序设计
1.算法
2.说明事项
1)将上一题中的结果去除尾数变为4.0e-03,得到I20粗糙估计值
2)计算出I20后利用循环即可计算出I0
(二)源程序
function [ y ] = test1_2
y=4.0e-03;
for i=20:-1:1;
y=y/(-5)+1/(5*i);
end
(三)实验结果
>> test1_2
ans =
1.823215567939546e-01
与log(1.2)的值相同
(3)结果分析
对于第一个公式
分析其误差传递
20次之后其误差惊人,其结果不可取
对于第二个公式
分析其误差传递
20次之后误差很小