浮動小数点と誤差 のバックアップ差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
浮動小数点と誤差について

早速例を見てみよう
#code(cpp){{
	if(0.1+0.7==0.8){
		printf("0.1+0.7==0.8 当たり前!");
	}else{
		printf("0.1+0.7==0.8 じゃない!?");
	}
}}
実行すれば分かるが、これは''偽''となる。(はず。少なくともこれを書いた人の環境ではそうなる)
値を変数に代入しても同様。

0.1等は2進数表記では循環小数となる。
そしてメモリは有限のためそれを有限桁で打ち切っている。
そこで誤差が発生しているのである。(これはC言語に限った問題ではない)

上の例でもわかるように、double型などについて==は使わない方が良い。

誤差にはほかにもいくつかの種類のものがある。
気が向いたときに追記する。