(2) エクセルで 1/3 を足し続けたらどうなるかを実際に試してみた。まず A 列に上から順に 0,1,2,3,… と入力した。また B 列と C 列を小数点以下20桁まで表示するようにした。
次にセル B1 に 0 を入力し、そこに 1/3 を足した値をセル B2 として、その式を下方向にコピーしたところ、下表のようになった。
A | B | C | D | |
1 | 0 | 0.00000000000000000000 | 0.00000000000000000000 | |
2 | 1 | 0.33333333333333300000 | 0.33333333333333300000 | |
3 | 2 | 0.66666666666666700000 | 0.66666666666666700000 | |
4 | 3 | 1.00000000000000000000 | 1.00000000000000000000 | |
: | : | : | : | |
21 | 20 | 6.66666666666666000000 | 6.66666666666667000000 | × |
: | : | : | : | |
128 | 127 | 42.33333333333340000000 | 42.33333333333330000000 | × |
: | : | : | : | |
142 | 141 | 47.00000000000010000000 | 47.00000000000000000000 | × |
: | : | : | : |
ところで、10進数の 1/3 を小数に直すと、右の計算により循環小数になる。これを「0.3」と表す。上表のセル B1 ~ B2 をみると、途中で四捨五入されているが、小数点以下15桁くらいまで正確に表示されていることがわかる。
さて、その関数式をさらに下方向にコピーしてみたところ、何か所かで計算が合わないところが見つかった。ところで、計算が合わないところを目で探すのは意外と難しい。そこで、エクセル自身にそれを発見させるようにしよう。そのために、まず A 列の各セルに 1/3 を掛けた値を C 列の同じ行に表示させることにした。これが四捨五入したときの正しい値で、いわば理論値にあたる。その上で、IF 関数を使って、B 列と C 列の値が異なれば D 列に 「×」 を表示させ、同じ値なら D 列に何も表示させないようにした。こうすればどこで誤差を生じたのかが一目でわかる。
ところで、なぜ誤差が生じるのだろう。それは10進数の1/3を2進数の小数で表してみるとわかる。エクセルでは10進数を入力して、計算結果を10進数で表示するが、計算そのものは2進数で実行しているからである。
① 上表のセル B2 , C1 , D1 に入る関数式を書きなさい。
ただし、下方向にコピーして正しく動く式を答えること。
② 10進数の 1/3 を2進数の小数で表しなさい。
ただし、 循環小数になる場合は「0.1001」のように表すこと。
《解答》
(1) ① 42 ② 0.625 ③ 171
(2) ① B2 = B1+1/3
C1 = A1*1/3
D1 = IF (A1=B1 , "" , "×")
② 0.01
0 件のコメント:
コメントを投稿