Matlab 可以正確計算 1/2 或者 1/5,但是
1 / 3計算結果是 0.3333; 我們知道答案應該是 0.3循環,所以 Matlab 的計算節果並不正確。 這是 所有數值計算軟體無法避免的誤差。 因為計算機的空間與人們能夠等待的時間是有限的, 所以所有的數值計算軟體,都 不可能計算小數點下無窮多位, 而必須在某個小數點下的位置切斷。 這就造成了誤差,稱為 四捨五入誤差 (round-off error) 或者 機器誤差 (machine error)。 這些誤差會「累積」,而逐漸造成較大的誤差。
數學的一門分支「數值分析」所討論的課題之一, 就是因為機器的有限性所產生的四捨五入誤差,在整個計算過程當中扮演的角色。
有時候 Matlab 聰明到可以還原具有少量誤差的小數。例如
3 * (1/3)得到答案 1,還有
1/3 + 1/3 + 1/3也得到答案 1。但是,雖然
7 * (1/7)可以得到答案 1,不過
1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7就變成了 1.0000。 這意味著 Matlab 並沒有真的算出來 1,而是非常接近 1 的一個數, 在小數點下第五位四捨五入之後,是 1.0000。
習題