浮動小数点の数値誤差
ロベールのC++入門講座 03-09
浮動小数点の話で少し驚いた。
下記のようなコードを実行する。
#include <iostream> using namespace std; int main () { for (double i=0.0; i<1; i+=0.1) { cout << i << endl; } return 0; }
条件ではiは1以下までとなっているはずなのに、1まで表示されてしまう。
$ main 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
これは浮動小数点の数値誤差によるものらしい。
もしこういった計算をしたければ、intの値でまず計算し、出力の寸前でdoubleに変えてやると数値誤差はでない。
#include <iostream> using namespace std; int main () { for (int i=0; i<10; i++) { cout << (i / 10.0) << endl; } return 0; }
$ main 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
気をつけるべし。