Excel での計算精度     Last modified: May 13, 2005

MS-Excel は,計算精度をないがしろにしている。
まさかとは思ったが,数値計算の本に出てくるような基本的な引っかけに,いとも簡単に引っかかる。

A 列に,1〜2000までの数値,B 列には A 列の数値に定数を加えたものを用意する。
加える定数のオーダーをいろいろ変えて,各変数の平均値,分散,および両者の相関係数を計算すると,おもしろいことになる。

下の例は,1.00E+13 を加えたとき。

             A 列                     B 列
平均値      1000.5000      10000000001000.2000
分散     333500.0000       5421103853606.9300
相関係数  0.999999889 (注)
                    1           10000000000001                 
                    2           10000000000002
                    3           10000000000003
                    :                        :
                 2000           10000000002000
Excel を書いたプログラマに教えてあげましょう。

  1. データの全てに定数を加えたとき,平均値はもとの平均値に定数を加えたものになる。
  2. データの全てに定数を加えたとき,分散はもとの分散と同じ。
  3. データの全てに定数を加えたとき,もとのデータとの相関係数は1になる。
注:追記(2003/01/15)
Excel には,相関係数を求める関数として,correl と pearson の二つがある。これは,一つの実体に二つの名前が付けられているのではないことが分かった。
上に示していたのは correl 関数の返した値であった。pearson 関数はもっと非道い値を返す。
=CORREL(A11:A2010,B2:B2020) = 0.999999889444342000
=PEARSON(A11:A2010,B2:B2020) = 0.000248155532603981


Excel 2004 になって,correl と pearson は同じ値を返すようになった。しかし,極端なデータの場合に変な値になる。

fig


fig


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI