浮動小数点って何?

はじめに
最近(2018年11月)、Togetterまとめ30年前のBASICで「0.01を10000回足したら100.003」になると書いてあったので、今の環境で試してみたら同じ結果だった話がちょっと話題になりました。
例えば、似たような話として、Rubyで0.01を100回足しても、ぴったり 1 にはならず、少し誤差が出ます ( 次の実行例参照 )。他のプログラミング言語でも大体似たような状況になるでしょう。
Rubyで0.01を100回足した場合
$ irb
irb(main):001:0> 100.times.reduce(0){|s,_| s+0.01 }
=> 1.0000000000000007
件のまとめでは「今の時代になって…」という意見も出てたりしますが、浮動小数点が何か知ってる人にはアタリマエの知識であっても、そうでないと単なる小数データとしか見えなくて、下手すると「計算でズレが出るなんてケシカラン!」という印象を抱くことも少なくないようです。
…本来であれば、(大抵の言語に標準で備わっているデータの種類なので)入門書等で知識を身に着けておくものかと思いますが、ちゃんと説明があるか?というとあまり無いようにも思いますので、ざっくり記事にすることにしました。
浮動小数点って何?
固定小数点と浮動小数点
一言で言えば、浮動小数点というのは一般の人が想像するような小数ではなく、計算で誤差が発生することを前提とした数値データのことです。
逆に言えば、浮動小数点を使う時は常に近似計算であることを意識し、結果の精度を考えろということでもあります。
それだけだと、何でそんなイケてないことするの? と疑問に思われるかも知れませんが、それは有限のリソースで計算を行うコンピュータの宿命であって、どこを妥協するかのポイントの違いです。
浮動小数点の逆は固定小数点であり、一般に言う整数データが該当します。これは、必ず1刻みで扱え、整数を扱う限り誤差は出ませんが扱える数値の範囲がそれほど広くありません。
※例えば64bit整数では -9,223,372,036,854,775,808~9,223,372,036,854,775,807 の範囲で、10進数として19桁です。
一方で、浮動小数点は誤差が出る代わりに非常に広い範囲の数を扱うことができます。

サイト名: Qiita

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する