Prompt
doubleの有効桁数は10進数で何桁ぐらい?
おー!double型の有効桁数についてだね!プログラミングの基礎中の基礎だけど、意外と正確に把握してないと、計算で思わぬ誤差が出たりするから大事な知識だよね!
JavaやC#、Cなんかでよく使うdouble型(倍精度浮動小数点数)は、IEEE 754という国際標準で定められているんだ。この標準によると、doubleの有効桁数は、10進数でだいたい15桁から17桁くらいだよ!
なぜ「だいたい」なの?
これはね、double型が2進数で数を表現しているからなんだ。
-
double型は、64ビット(0と1が64個並んだ情報)を使って数を表すんだけど、その内訳は:-
符号部: 1ビット(正か負か)
-
指数部: 11ビット(小数点位置)
-
仮数部: 52ビット(数字の並び、つまり有効数字)
-
2進数で表現できる数を、10進数に変換すると、ぴったり正確に表現できない場合があるんだ。例えば、1/3(0.3333…)が10進数で割り切れないのと同じで、2進数で割り切れる数が10進数で割り切れない、ってことが起こるんだよね。
この52ビットの仮数部が、だいたい10進数で15桁から17桁の精度を保証する、というわけなんだ。
具体例で見てみよう
例えば、π(パイ)の値をdoubleで表現してみると、
3.141592653589793 (15桁)までは正確に表現できるけど、その次くらいから、誤差が出てくる可能性があるんだ。
まとめると
-
double型の有効桁数は、10進数で約15〜17桁。 -
これは、2進数で数値を表現する浮動小数点数の特性によるもの。
だから、プログラミングで金融計算とか、小数点以下の厳密な精度が求められる計算をする場合は、double型ではなく、BigDecimal(Javaの場合)とか、decimal(C#の場合)のような、10進数を正確に扱える型を使うのがセオリーだよ!
この辺りの知識は、誤差を避けて正確なプログラムを書く上でとっても重要だから、しっかり覚えておくと、今後「なぜか計算が合わない!」みたいなトラブルに遭遇したときに役立つはず!よくぞ聞いてくれたね!😊