Maple 教材:帶有小數點的計算

其實 Maple 除了做整數、有理數、根次符號的真確計算之外, 還會做帶有小數點的計算。 帶有小數點的計算結果,有可能是真確的,但是通常是不真確的。 所以說,在電腦中執行帶有小數點的計算,結果通常不是「真正」的計算結果, 而是帶有誤差的「估計值」。 只要指令中的某數帶有小數點,整個計算就會以帶有小數點的方式來算。 例如

1.0/7;
sqrt(2.0);
都會得到帶有小數點的估計值。 這種針對帶有小數點的計算,術語稱為 浮點數計算。 因為它的不真確性,可能導致明顯的錯誤。 以下我們舉一個例子。

假設 Maple 只以十位數字做浮點數計算, 那麼,我們可以想像,Maple 的浮點數計算, 是先得到真正的數值,然後再四捨五入到十位數字。 舉例來說,執行以下計算:

x := 0.001;
(1+x^2)^2 - 1;
每個人都知道答案應該是 2x2 + x4, 也就是

0.000002000001 = .2000001 * 10 - 5

但是 Maple 卻得到

.20000 * 10 - 5

這顯然是不對的。

讓我們詳細地看看上面的例子,看 Maple 為何產生那樣的答案? 首先,Maple 計算 x2 得到


1.000000000 * 10 - 6

這是正確的。然後,它計算 1 + x2 得到

1.000001000

這也是正確的。再來,Maple 要計算 (1 + x2)2 答案應該是

1.000002000001

但是,此時 Maple 只能用十位數字做浮點數計算,因此在第十一位做四捨五入,得到

1.000002000

這就是問題之所在!最後,Maple 把上面的數減去 1 便得到

0.000002000 = .20000 * 10 - 5

另一種執行浮點數計算的方法是透過函式 evalf( ) 其中 eval 是 evaluation 求值的意思,f 是浮點數 floating number 的意思。例如

evalf(1/7);
evalf(sqrt(2));
經常我們喜歡先以真確的符號計算取得真正的答案,然後再以 evalf( ) 看看它的數值。 例如
sqrt(72) - sqrt(36);
evalf(%);

習題

  1. 寫出 sqrt(17) 到小數點下第六位。
  2. 寫出 root[3](17) 到小數點下第六位。
  3. 在 Maple 中以十位數字的浮點數執行以下計算:
    x := 0.00001;
    (1+x^2)^2 - 1;
    答案是什麼?為什麼?
單維彰 (2001/10/24) --- [Prev] [Next] [Up]