2019年3月27日水曜日

エクセルはとことん2進法で計算する

 前の記事「エクセルには誤差がある」で、エクセルで「0.5を足し続けても誤差を生じないが、1/3 や 0.1 を足し続けると誤差が生じる」ことを示した。さて、その訳は、何なのだろう?
 それは、10進数の 0.5 , 1/3 , 0.1 を2進数で表してみるとわかる。エクセルでは10進数を入力して、計算結果を10進数で表示するが、計算そのものは2進数で実行しているからである。
 まず、0.5 から。10進数の 0.5 を2進数で表すと 0.1 となる「0.5(10)=1/2(10)=1/10(2)=0.1(2)」。つまり、2進数で表したとき、これは「割り切れる数(有限小数)」だ。
 次に10進数の 1/3 を2進数にしてみよう。そのために、まず分母の3を2進数にしてみると 11 となる。つまり、1/3(10)=1/11(2) である。そこで、実際に割り算してみよう。もちろん、2進数の割り算をするのだが、10進数の割り算と若干異なるけれども、手順はほとんど同じである。
 同じように、10進数の 0.1 を2進数にしてみよう。0.1(10)=1/10(10) で、分母の 10 は2進数で 1010(2)だから、2進数の割り算 1÷1010 を実行すればよい。
 その結果は、次の通りである。


 10進数の 1/3 は割り切れない数(循環小数 0.3333…)だが、2進数でも割り切れなかった(循環小数 0.0101…)。10進数の 1/10 は割り切れる数(有限小数 0.1)だが、2進数では 0.000110011… とこれも循環小数になった。だから、コンピュータの中では 1/3 や 0.1 を正確に計算することはできないのである。コンピュータは有限個のものしか扱えないので、無限小数はどこかの位で丸めて処理することになって、だから誤差が発生するのである。
 ちなみに、現行の学習指導要領では、上のような2進数の割り算や循環小数についても高校・数学で扱う。というわけで、この記事は高校・数学科と高校・情報科のコラボ・ネタである。


 →  →  →  →  → 

0 件のコメント:

コメントを投稿