浮動小数点型の誤差
[ 2009.11.24 ] by h_tab | Categories:技術情報
さて問題、C#で以下のコードを実行すると、どのような結果になるでしょう?
static void Main(string[] args)
{
double sum = 0;
for (int i = 0; i < 1000; i++)
{
sum += 0.1;
}
System.Console.WriteLine(sum);
}
実際の実行結果の答えは、
99.9999999999986
となりました。
100にはなりません。
浮動小数点の誤差については基本情報技術者試験にも出題されているようなので常識といえば常識なんでしょう。
「浮動小数点は誤差が発生する」ということは、IT技術者だったら少なからず知識としてはあると思います。
ですが、これまで幾度となく固定小数点で扱うべき値を浮動小数点で扱っていたばかりに、後から大幅な修正が必要となってしまったプロジェクトを私は見てきました。
多分、最初にプログラムの勉強をする際には、誤差がどれほど厄介な不具合となってしまうのか認識していないので、簡単にdoubleやfloatを使ってしまうんでしょうね。
今回の記事を読んで意味が分からない人は、この機会にきちんと理解しておいた方が良いと思います。
Wikipediaにも掲載されているので参考にどうぞ。
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0














最近のコメント