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進数を正確に扱える型を使うのがセオリーだよ!

この辺りの知識は、誤差を避けて正確なプログラムを書く上でとっても重要だから、しっかり覚えておくと、今後「なぜか計算が合わない!」みたいなトラブルに遭遇したときに役立つはず!よくぞ聞いてくれたね!😊