2014年2月21日金曜日

パソコンの誤差

昨日の記事で,十進法の有限小数 0.4 が二進法では
無限循環小数0.011001100110011・・・
となると書いた.>以前の「分点の作図」

つまり,パソコンは有限の桁数しか扱えぬ機械だから,十進の有限小数 0.1 は二進数は無限小数となり,パソコンはそれを丸めて計算する.
たくさん計算すると,誤差が蓄積する.

試しにエクセルで
5 4.9 と2つのセルに入れて,フィルハンドルをドラッグすると,
5
4.9
4.8
4.7
4.6
4.5
4.4
4.3
4.2
4.1
4
3.9
3.8
3.7
3.6
3.5
3.4
3.3
3.2
3.1
3
となるが,
3.5 の数式バーを見ると,
3.50000000000001
となっている.
誤差が蓄積したのだ.
3.50000000000001
3.50000000000001

さらに 0 となるべきところが,
2.04281036531029E-14
つまり,
0.0000000000000204281036531029
となっている.
誤差の蓄積
2.04281036531029E-14


もし,「=0 かどうか」を判断に使うような場面で 0.1 刻みを用いると, =0 となるべきところでなってくれない.

これは十進 0.1 がコンピュータ内部の二進数では
0.000110011001100110011001100110011001100110011001100110011
を丸めたものだからである.たくさん計算すると誤差が蓄積する.

しかしコンピュータ内部でも有限小数となるのが,2の累乗の逆数.

整数 5 から 1/32 = 0.03125 を引き続けると
5
4.96875
4.9375
4.90625
4.875
4.84375
4.8125
4.78125
4.75
4.71875
4.6875
4.65625
4.625
4.59375
4.5625
4.53125
4.5
と並ぶが,0 となるべきところで ドンピシャ 0 となる.

ちょうどゼロ
ジャスト0

十進0.03125 は 二進 0.00001 だからである.

0 件のコメント:

コメントを投稿

スパム対策のため,コメントは,承認するまで表示されません。
「コメントの記入者:」は「匿名」ではなく,「名前/URL」を選んで,なにかニックネームを入れてください.URL は空欄で構いません.