測定値や計算結果のうち、信頼できる桁数のこと。浮動小数点数では仮数部のビット数で有効桁数が決まります。
有効桁数とは、測定値や計算結果のうち信頼できる桁の数です。 たとえば定規で長さを測って「3.14 cm」と読めたなら、有効桁数は3桁です。最後の桁は目分量なので多少の誤差を含みますが、それでも意味のある数字です。
身近な例でいうと、体重計が「65.3 kg」と表示したら有効桁数は3桁です。これは「65.30000... kg」まで正確という意味ではなく、小数第1位まで信頼できるということです。「65.3 kg」と「65.30 kg」では意味が違い、後者は「小数第2位まで測定した」という より高い精度を主張しています。
コンピュータの浮動小数点数でも同じ考え方が使われます。単精度(32ビット)は約7桁、倍精度(64ビット)は約15桁の有効桁数を持ちます。 これを超える桁は信頼できない「ゴミ」です。上のツールで数値を入力して、有効桁数がどう判定されるか確認してみてください。
有効桁数を数えるルールは以下の3つだけです:
つまり、有効桁数を数えるには「最初のゼロでない数字から、最後の数字まで」を数えればOKです。 上のツールで0.004050と入力すると、 先頭の「0.00」は非有効、「4050」の4桁が有効桁として色分け表示されるのを確認できます。
| 演算 | ルール | 例 | 結果 |
|---|---|---|---|
| 加算・減算 | 小数点以下の桁数が少ない方に合わせる | 1.2 + 0.035 | 1.2(小数1位まで) |
| 乗算・除算 | 有効桁数が少ない方に合わせる | 3.14 × 2.1 | 6.6(2桁) |
計算結果の有効桁数は、元のデータの有効桁数によって決まります。加減算では小数点以下の桁数が少ない方に合わせ、乗除算では有効桁数が少ない方に合わせます。 直感的には「一番精度が低いデータに足を引っ張られる」と覚えましょう。
具体例で確認します。加算 1.2 + 0.035 では、1.2は小数第1位まで、0.035は小数第3位までの精度です。 結果は小数第1位(精度が低い方)に合わせて1.2とします。 乗算 3.14 × 2.1 では、3.14は3桁、2.1は2桁なので、結果は2桁に合わせて6.6です(計算途中の6.594を2桁に丸める)。
なぜこのルールがあるかというと、元々不確かなデータから、それ以上の精度は得られないからです。 たとえば「約2 m」の棒の面積を求めるのに、幅を0.12345 mと精密に測っても、長さの不確かさが結果を支配します。
コンピュータの浮動小数点数はIEEE 754規格で定められています。仮数部のビット数が有効桁数を決定します。 単精度は仮数部23ビット(+暗黙の1で実質24ビット)なので log10(224) ≈ 7.22、つまり約7桁の10進有効桁数です。
たとえば単精度で12345678.0(8桁)を格納すると、 実際には12345680.0になります。 8桁目以降が丸められてしまうのです。これが「有効桁数は約7桁」の具体的な意味です。
倍精度では仮数部52ビット(実質53ビット)で log10(253) ≈ 15.95、約15〜16桁の精度です。 金融計算や科学技術計算で単精度では精度が足りない場合は、倍精度や多倍長演算ライブラリを使います。
有効桁数が減る最も危険なケースが桁落ちです。 ほぼ同じ大きさの2つの数を引き算すると、上位の有効桁が相殺されてしまい、残った桁の精度が極端に低くなります。 つまり、「近い値同士の引き算は危険」ということです。
たとえば6桁の精度で 1.23456 − 1.23451 = 0.00005 となり、有効桁数が6桁から1桁に激減します。 この結果をさらに計算に使うと、相対誤差が爆発的に大きくなります。これが数値計算で桁落ちが恐れられる理由です。
桁落ちと混同しやすい概念に情報落ちがあります。情報落ちは「非常に大きな数と非常に小さな数を加減算するとき、小さい方の情報が失われる」現象です。 たとえば単精度で 10000000 + 0.5 を計算すると、0.5が有効桁数の範囲外に落ちて結果は 10000000 のままになります。 「桁落ち」「情報落ち」「丸め誤差」「打ち切り誤差」は、いずれも有限の桁数で計算することから生じる誤差ですが、発生する状況が異なります。
科学技術計算や金融計算では、有効桁数の管理が結果の信頼性に直結します。 気象シミュレーションでは何百万回もの計算を繰り返すため、1回ごとの小さな誤差が最終結果を大きく狂わせることがあります。
対策としては、(1) 倍精度を使って有効桁数を増やす、(2) 桁落ちが起きにくいアルゴリズムに変更する(例: 二次方程式の解の公式の変形)、(3) 必要なら多倍長演算ライブラリを使う、などがあります。
たとえば二次方程式 ax2 + bx + c = 0 の解の公式で、b2 と 4ac が近い値のとき桁落ちが発生します。 この場合は「解と係数の関係」を使って一方の解からもう一方を求めることで桁落ちを回避できます。 こうした数値的に安定なアルゴリズムを選ぶことが、精度の高い計算への第一歩です。