【ふどうしょうすうてん】
浮動小数点 とは?
最終更新:
💡 限られた桁で、広い範囲の数を表す
数を符号・仮数・指数などで表し、限られた桁数で広い範囲を扱う方式。二進と十進の方式があり、使う型や精度に応じて丸めが生じる。
📌 このページのポイント
- 仮数と指数を組み合わせて、広い範囲の数を表す
- IEEE 754の二進形式にはbinary32やbinary64がある
- 有限の二進形式では、0.1などを正確に表せない
- 十進の浮動小数点でも、精度や丸め方の確認は必要
浮動小数点って何?
たとえば1.23×10²のように、仮数と指数で数を表す方法だよ。この十進の例は123。限られた桁数で幅広い大きさを扱えるけど、すべての数を正確に保存できるわけではないんだ。
0.1+0.2が0.3にならないのはなぜ?
有限の二進の桁数では、0.1や0.2を正確に表せず近い値に丸めるからだよ。JavaScriptのNumberで計算すると0.30000000000000004になる。すべての言語や数値型で同じ表示になる、という意味ではないんだ。
小数は全部ずれるの?
全部ではないよ。たとえば0.5は二進の0.1なので、正確に表せる。保存できる桁数や指数の範囲には限界があるため、どの数もどんな計算も正確という保証はないんだ。
お金のように、十進の値をきちんと扱いたいときは?
用途に応じて十進のDecimalや、決めた最小単位の整数などを検討するよ。PythonのDecimalは固定小数点専用ではなく、十進の浮動小数点も扱う。精度、丸める時点、入力方法をそろえることが大切だね。
単精度と倍精度はどう違うの?
もっと詳しく知りたい人へ
Decimalを使えば、丸め誤差はすべてなくなる?
なくならない。PythonのDecimalは十進の浮動小数点演算を扱い、文字列から作る0.1や0.2は正確に表せるが、1÷3のような無限に続く値は設定した精度で丸める。二進floatから変換すると、すでに近似された値がそのまま変換されるので、入力の作り方と丸めの規則も確認する。
まとめ:ざっくりこれだけ覚えればOK!
「浮動小数点」って出てきたら「仮数と指数で広い範囲の数を表す方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Floating Point」 = 小数点の位置が固定されない数の表現
💬 仮数と指数を組み合わせ、指数によって数の大きさを変える方式だよ。固定小数点とは、小数点の位置の扱いが違うんだ