Excel と IEEE 754 --小数の計算で知ったこと--

高校3年の担任をしている。
1学年300名弱について、成績順位を出す必要が生じた。5段階評価の平均(0.1刻み)を用いた。

職場では、桐ver8 及び Excel2002 を主に使っている。

Excel の「オートフィル」を用いて、5.0から2.0までの数値が入っているセルを作成した。その横のセルにて「countif 関数」を用い、それらの評定平均の人数を数えた。「評定平均5.0(オール5)」の生徒も、「同2.0(スーパーウルトラ低空飛行)」の生徒も居ないが。
そうしたところ「評定平均3.5以下」の生徒が1人もカウントされなかった。

5秒ほど悩み、「オートフィル」で作成された数値が入っているセルにカーソルを合わせた。すると、"3.50000…1"などという値になっていた。
最近「エクセルでバグがある」というニュースがあったから、「私もバグを発見したかも」って面白がってみた。"excel オートフィル バグ 小数"などとググってみたが、そのような情報は発見できなかった。

よくよくその値をチェックしてみると、有効数字15桁目くらいから数値がおかしくなっていることに気付いた。ひらめいたので"excel 浮動小数点 桁数"でググってみたところ、問題は解決した。
単なる「Excel の仕様」であった。「IEEE 754 に準拠」した「浮動小数点」の扱いによる「丸め」の影響だそうだそうな。サポートページにバッチリ書いてあった。

Excel で浮動小数点演算の結果が正しくない場合がある
http://support.microsoft.com/kb/78113/ja

オートフィルで作成した数値の大群を以下に示す。
黄色い背景の部分が、計算がずれたように見える所。
excel2002_1s.gif

なお、連続データを作成する際に、きちんと増分を指定してやれば(今回は"-0.1")、この問題は生じない。アタリマエなのかも知れないが。
excel2002_2.gif


エクセルの挙動について、こんなページを発見した。とても判りやすい。
日経PC21 / “達人”芳坂和行氏に学ぶ、エクセル(Excel)「演算誤差」対策講座
http://pc.nikkeibp.co.jp/pc21/special/gosa/

ここにあるのは2007年10月20日 20:45の日記です。

ひとつ前の日記は「訣別の時(rimnetと)」です。

次の日記は「色覚"アンチ"バリアフリーな西武鉄道の新しい路線図(案?)」です。

最近の日記はこちらで見られます。過去に書かれたものはアーカイブで見られます。