桁落ちについて

C言語の講義で「桁落ち」という現象を扱いました.

浮動小数点において入力された順に足していくと不確かな値が出力されてしまう場合があります.

↓ ↓ ↓

情報落ち、桁落ち、丸め誤差、打切り誤差の違い

↑ ↑ ↑

こちらに詳しく載っていたので解説はこちらで~

桁落ちを少しでも防ぐためには各値の絶対値で昇順にソートする必要があります.

講義ではCで書きましたが、ブログではPython3で書いていきたいと思います.

まずは入力をそのまま計算した場合です.

gist.github.com

f:id:umashika5555:20160415174135p:plain

出力は54.0だそうです. Cでもこうなりました.

 

 

次は絶対値で昇順にソートして計算した場合です.

gist.github.com

f:id:umashika5555:20160415174202p:plain

出力は52.0になりました. 同じくCでもこうなりました.

少し見にくいですが-1e16までが入力でソートした順に表示をしています.(改行すべきだった)

 

何かを徐々に足していくプログラムを作るときにただ加えていくだけだと痛い目を見る可能性があるので桁落ちに気をつけてプログラムを作って下さい!