fl((x?y)?z)?(0.23371258?10?4?0.33678429?102)?0.33677811?102?(0.00000023?102?0.33678429?102)?0.33677811?102?0.33678452?10?0.33677811?10?0.00000641?102fl(x?(y?z))?0.23371258?10?4?(0.33678429?102?0.33677811?102)?0.23371258?10?4?0.00000618?102?0.00000023?10?0.00000618?10?0.00000641?1022222
精确计算得:
x?y?z?0.23371258?10?4?0.33678429?102?0.33677811?102?(0.00000023371258?102?0.33678429?102)?0.33677811?102?0.33678452371258?10?0.33677811?10?0.0000641371258?10222
第一种算法按从小到大计算,但出现了两个数量级相差较大的数相加,容易出现大数吃小数.而第二种算法则出现了两个相近的数相减,容易导致有效数位的减少。计算结果证明,两者精度水平是相同的。
***
在机器数系F(10,8,L,U)中,取三个数
x?0.23371258?10?4,y?0.33678429?10?2,z??0.33677811?102,试按
(x?y)?z,x?(y?z)两种算法计算x?y?z的值,并将结果与精确结果比较。
解:
fl((x?y)?z)?(0.23371258?10?4?0.33678429?10?2)?0.33677811?102?(0.00233713?10?2?0.33678429?10?2)?0.33677811?102?0.33912142?10?2?0.33677811?102?0.00003391?102?0.33677811?102??0.3367442?102fl(x?(y?z))?0.23371258?10?4?(0.33678429?10?2?0.33677811?102)?0.23371258?10?4?(0.00003368?102?0.33677811?102)?0.23371258?10?4?0.33674742?102?0.00000023?102?0.33674742?102??0.33674719?102第一种算法是按从小到大的顺序计算的,防止了大数吃小数,计算更精确。
精确计算得:
5
x?y?z?0.23371258?10?4?0.33678429?10?2?0.33677811?102?0.000023371258?0.0033678429?33.677811?0.003391214158?33.677811??33.674419785842??0.33674419785842?102
显然,也是第一种算法求出的结果和精确结果更接近。
7、某计算机的机器数系为F(10,2,L,U),用浮点运算分别从左到右计算及从右到左计算
1?0.4?0.3?0.2?0.04?0.03?0.02?0.01
试比较所得结果。 解:从左到右计算得
1?0.4?0.3?0.2?0.04?0.03?0.02?0.01?0.1?10?0.04?10?0.03?10?0.02?10?0.00?10?0.00?10?0.00?10?0.00?10
?0.19?10?1.9从右到左计算得
1?0.4?0.3?0.2?0.04?0.03?0.02?0.01?0.01?0.02?0.03?0.04?0.2?0.3?0.4?1?0.1?10?1?0.2?10?1?0.3?10?1?0.4?10?1?0.2?0.3?0.4?1?0.1?0.2?0.3?0.4?1?0.1?10?1?0.1?10?0.1?10?0.2?10?2从右到左计算避免了大数吃小数,比从左到右计算精确。
8、对于有效数x1??3.105,x2?0.001,x3?0.100,估计下列算式的相对误差限
y1?x1?x2?x3,y2?x1x2x3,y3?x2 x3分析:求和差的相对误差限采取先求出和差的绝对误差限再求相对误差限的方法。求积商的相对误差限采取先求每一个数的相对误差限再求和的方法。
解:因为x1??3.105,x2?0.001,都是有效数, x3?0.100所以?(x1)?0.0005,?x(2)?0.0005,?x3(?) 0.0005 6
?(x1)?0.00050.00050.0005?0.16%,?(x2)??50%,?(x3)??0.5% 3.1050.0010.100则?(x1?x2?x3)??(x1)??(x2)??(x3)?0.0005?0.0005?0.0005?0.0015
?(x1?x2?x3)?
?(x1?x2?x3)x1?x2?x3?0.00150.0015??4.99?10?4?0.05%?3.105?0.001?0.1003.004?(x1x2x3)??(x1)??(x2)??(x3)?0.16%?50%?0.5%?50.66% ?(2)??(x2)??(x3)?50%?0.5%?50.5%
指出:
如果简单地用有效数字与误差的关系计算,则不够精确。
9、试改变下列表达式,使其计算结果比较精确(其中x?1表示x充分接近0,x?1表示x充分大)。
(1)lnx1?lnx2,x1?x2; (2)
11?x?,x?1; 1?x1?xxx3(3)x?(4)
11?x?,x?1; xx1?cosx,x?0且x?1; x1(5)?cotx,x?0且x?1。
x分析:根据算法设计的原则进行变形即可。当没有简单有效的方法时就
采用泰勒展开的方法。
解:(1)lnx1?lnx2?ln(2)
x1; x211?x1?x?(1?x)2??1?x1?x(1?x)(1?x)?1?x?(1?2x?x)3x?x?(1?x)(1?x)(1?x)(1?x)22;
(3)
7
11x??x??xx??或
11?x??xxx2?1x2?1?xx
x2?1?x2?1x2x(x2?1?x2?1)(x?x?11(x?)?(x?)xx??11x??x?xx2?x(x2?1?x2?1)x2?x(x2?1?x2?1)1111?x?)(x??x?)xxxx11x??x?xx2x x2?1x2?1?xx(4)
2nx2x4nx1?(1?????(?1)??)1?cosx2!4!(2n)!?xx2nx2x4n?1x????(?1)??2!4!(2n)!?
x2n?1xx3n?1x?????(?1)??2!4!(2n)!(5)
22nBn2n?1111113?cotx??(?x?x???x??)xxx345(2n)!22nBn2n?1113?x?x???x??345(2n)!(Bn是贝努利数)
指出:
8