浮動小数点と誤差 のバックアップ差分(No.1)
- バックアップ一覧
- 現在との差分 を表示
- ソース を表示
- 浮動小数点と誤差 へ行く。
- 1 (2013年05月05日 (日) 13時42分02秒)
- 2 (2013年05月05日 (日) 22時57分48秒)
- 追加された行はこの色です。
- 削除された行はこの色です。
浮動小数点と誤差について 早速例を見てみよう #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型などについて==は使わない方が良い。 誤差にはほかにもいくつかの種類のものがある。 気が向いたときに追記する。