有効数字

ここで説明するのは高校までに習う暫定的な簡易ルール。
大学生以上は使用禁止?!

[
前の記事へ]  [物理数学の目次へ]  [次の記事へ]


よくある話

 実験などで得た値には必ず誤差が含まれる。そのような値を誤差を含む桁よりも詳しく延々と書くことには意味が無い。どうせある桁より下は不確かな、そう、デタラメな数字なのだ。これを聞くとほとんどの人がそりゃそうだと納得してくれる。

 しかし、例えば「直径 30.0 mm の円の円周の長さをなるべく正確に知りたい」と言うと、知ってる限りの正確な円周率を電卓に叩きこんで、出てきた結果をそのまま最後まで無駄なく使って 94.2477796077 mm などと教えてくれたりする。この数値のどこまでが確かな数字だと言えるだろうか。

 これは簡単に確認ができる。直径の最後の桁に僅かな誤差が含まれているとして、正確な値が 29.95 〜 30.05 くらいの範囲に含まれていたとしよう。これに出来るだけ細かい円周率を掛けたとすると、94.090699975 〜 94.4048592404 である。最初から数えて 3 桁目で既に怪しくなってくる。それ以降はもう、無駄な情報でしかない。

 それに似た事例はあちこちで見られるのである。

 また、高い精度で測定された値とそうでない値を組み合わせて計算した値をそのまま細かい数字まで書き残すことにも意味が無い。ではどういう指針で書き残すようにしたらいいだろうか。


表記の基本

 物理学の実験をするには色々なものを測定する必要がある。長さを測り、重さを測り、時間を測る。電流、電圧、明るさ、温度、他にも色々だ。この時、我々人間は測定機器の指し示す目盛りを読むことになる。

 最小目盛の1/10くらいまでなら目分量で読み取れるだろう。そもそも、読み取れるくらいまでしか目盛りは振られていないものだ。人間に読めないほど細かく目盛りを振ることに意味はないからだ。

 そうやって目分量で読み取った最後の桁は正確だろうか?いや、その正確さに関してはかなりの疑いが残る。しかしながらその最後の桁にもおおよそ正しい情報が含まれており、それを記録に残さないのはもったいない。しかしそれより下の位の数値を記録することは全くの無駄である。それが無意味であることを理解していないことになるので、かなり恥ずかしい行為ですらある。そこで科学や工学に携わる者は、次のような統一ルールを採用することにした。

記載されている数値の最後の桁は参考にはなるが、かなり怪しいと疑え!

 このルールを採用しておけば、どの桁まで書き記すかによって、どの桁までが信用できるかを明確に伝えることができるわけだ。

 さて、正確さが疑わしい最後の桁が小数点以下にある場合はそれより下位の数値を書かなければいいだけの話だが、小数点より上位の桁に怪しい数値が含まれる場合には困ってしまう。位取りのために仕方なく末尾に0を並べることになると思うが、どこまでを信用していいのか分からなくなってしまうからだ。例えば

\[ \begin{align*} 123000 \end{align*} \]
という記述を見た場合に、上から 3 桁目が既に怪しいのか、怪しいのは 4 桁目であって 3 桁目は確実に正しいのかはっきりしない。あまり正確さにこだわりがない場合にはこのような表記も仕方ないだろう。

 しかしどの桁までを信用していいのかはっきり伝えたい場合には、次のような表記をする。

\( 1.23 \times 10^5 \) (上から3桁目で怪しい)
\( 1.230 \times 10^5 \)(上から4桁目が怪しい)
\( 1.2300 \times 10^5 \)(上から5桁目が怪しい)

 このような表記法は小さな数値を表すときにも使える。例えば

\[ \begin{align*} 0.000456 \end{align*} \]
という数値は 4.56 を 1/10000 にした値なので、
\[ \begin{align*} 4.56 \times 10^{-4} \end{align*} \]
と表してやれる。慣れてしまえばこの方がずっと分かりやすい。0 が幾つ並んでいるか数えなくて済むからだ。

 このような「10の何乗」という表示の助けを借りて桁数を表すやり方を「指数表記」と呼ぶ。「科学的表記法」とも呼ぶ。

\[ \begin{align*} a \times 10^m \end{align*} \]
と書いた時、\( 1 \leqq a \lt 10 \)の範囲になるようにするのが基本だが、物理においては絶対そうしなければならないわけではなく、読みやすさに配慮して柔軟に使われている。

 最上位の桁から数えて、疑いを含む桁まで含めて数え、全部で何桁あるかを「有効桁数」と呼ぶ。ただし、小数などの場合には最初の方の 0 は含めない。数値を上位の桁から見ていって、初めて 0 でない数字が現れた桁から数える。

 有効桁数のことを「有効数字の桁数」と呼ぶこともある。「有効数字 n 桁」のように表現することもある。このことから「有効数字」というのが何を指すのかを把握してもらいたい。

 先ほどの例で使った\( 1.230 \times 10^5 \)ならば有効数字というのは\( 1.230 \)の部分のことであり、有効数字は 4 桁である。\( 0.000456 \)ならば有効数字は\( 456 \)の部分であり、有効数字は 3 桁である。


足し算の作法

 次は、このような意味を込めて表記された数値を使った計算の作法について学ぼう。まずは足し算からだ。

 二つの数の足し算をする場合、それぞれの数値の「疑いを含む桁」が何の位にあるかを見比べる。どちらも同じ位になっていれば普通に足し算をすればいい。何の問題もない。いや、一つだけ注意しておこう。例えば次のような計算をした場合、結果の末尾が 0 になる。

\[ \begin{align*} 3.9 + 5.1 = 9.0 \end{align*} \]
 この 0 は残しておくべきである。この桁の数値に僅かな疑いが残っていることを意味する重要な役割があるからだ。

 さて「疑いを含む桁」の位に違いがある場合には少し注意が必要だ。足し算の結果は、より正確さに欠ける方に合わせるべきである。一方の数値がやたらと正確であっても、あまり正確でない測定値と合わせれば、細かい数値はもう信頼できなくなってしまうからだ。

 次のような計算結果は表計算ソフトなどを使っているとよく見かける。

\[ \begin{align*} 2.8 + 15.0004 = 17.80004 \end{align*} \]
 この場合は、もう小数点第 1 位までしか信頼できないので、このままではいけない。片方の数値の正確さをいつまでもありがたがっても無駄なのだ。足し合わせた結果がこの桁まで正確だという誤解を与えてしまうことにもなる。よって最終的には次のように書き残すべきである。
\[ \begin{align*} 2.8 + 15.0004 = 17.8 \end{align*} \]
もう少し微妙な例を紹介しよう。
\[ \begin{align*} 4.5 + 1.183 = 5.683 \end{align*} \]
 これも小数第 1 位まで書き残すべきであるが、5.6 というより 5.7 に近いと言えるだろう。5.7 と書き残すべきだ。
\[ \begin{align*} 4.5 + 1.183 = 5.7 \end{align*} \]
 つまり書き残す桁のひとつ下を見て四捨五入してやればいいのである。

 ここまでは二つの数値の足し算の話だったが、三つ以上になると何か変わるだろうか。一つずつ足し合わせては四捨五入、という操作を繰り返すと余計な誤差が蓄積する可能性がある。やるなら一気に全部を足し合わせた方が良いだろう。そして、足し合わせるすべての数値のうちで一番正確さに欠ける数値の末尾の位に合わせて書き残すように四捨五入してやるのである。


引き算の作法

 次は引き算についてだ。基本的には足し算と全く同じである。足し算や引き算が混じっている場合でも同じであり、一気に計算して、一番信頼の置けない数値の末尾の位に合わせて書き残す。

 ところが引き算の場合には次のようなことが起きる場合がある。

\[ \begin{align*} 76.859 - 76.8433 = 0.0157 → 0.016 \end{align*} \]
 第 2 項のほうがより正確で小数第 4 位まであるが、第 1 項の数値が小数第 3 位までなので、書き残すのは小数第 3 位までである。その点は今まで説明した通りなのであまり問題ない。注目してほしいのは、第 1 項の有効数字が 5 桁、第 2 項の有効数字が 6 桁もあったのに、結果の有効数字はたったの 2 桁にまで減っているという点だ。すごくもったいない気がしてしまうが、このようなことは引き算では普通に起こることなので気にしてはいけないと言いたかったのである。

 有効数字の桁数は減るばかりでもない。足し算では次のように繰り上がりによって一つ増えたりもする。

\[ \begin{align*} 4.3 + 7.5 = 11.8 \end{align*} \]
 最初 2 桁だったのが 3 桁になっている。こういうことも普通に起こりうる。心配は要らない。


掛け算の作法

 次は掛け算を説明しよう。

 足し算や引き算とは違って、位の位置を揃えて比較する必要はない。有効数字の桁数だけが重要になってくる。最も有効数字の桁数の小さな数値を見付け、計算結果はその桁数と同じになるように記録する。

 次の例は有効数字が 3 桁と 2 桁の数値の掛け算だ。途中計算では何桁もの数字が並ぶだろうが、結果は 2 桁で表す。そのために四捨五入を行う。

\[ \begin{align*} 0.123 \times 0.45 = 0.05535 → 0.055 \end{align*} \]
 この作法を使った極端な例は次のようなものだ。ちょっと気持ち悪いかもしれない。
\[ \begin{align*} 0.4 \times 0.7 = 0.3 \end{align*} \]
 これは仕方ない。どちらも有効数字が 1 桁しかないのでこの数字自体が最初からあまり信用ならなかったのだ。


割り算の作法

 割り算も、掛け算と同じであり、普通に細かく計算した後で、最も有効数字の桁数の小さなものに合わせて結果を書く。


数学の定数や定義値の扱い

 測定値どうしを組み合わせることの主目的は別の物理量を計算することにあるわけだが、そのための公式には測定値以外のものが含まれることもあるだろう。

 例えば円周率や自然対数の底 e などの数学的な定数だ。これらは誤差を含むようなものではないので有効数字は無限桁だと考えて計算すればいい。

 公式にただの「2」や「3」などの数字が出てくることもあるが、これも無限桁だと考えて計算する。つまり 2 なら 2.0000000・・・・・・のように有効数字が無限に続くものだと考えてやるわけだ。

 他にも 1 回、2 回とはっきり数えられる現象、粒子の個数など、誤差なくはっきり定まっているものは有効数字が無限桁だと考えて計算してやればいい。

 光速は 299,792,458 m/s と決められている定義値である。末の桁までまったく正しいという扱いなので、有効数字は 9 桁ではなく無限桁として扱う。

 アボガドロ数については粒子の個数を意味しているが、今のところは最後の一つまで数えたわけではない測定値なので、有効数字は有限である。とは言うものの、今後、質量の定義がアボガドロ数を基準にするように変更される可能性があるので、そうなった場合には定義値に昇格することになるかもしれない。


楽する工夫

 有効数字が無限桁であるとして扱う数値の話が出てきたが、もちろん四捨五入の前に無限桁の数値を使って計算する必要などない。ある程度の桁までを数値を使って計算することになる。

 しかし一体どれくらいの桁まで使って計算すれば十分だと言えるだろうか。

 結論から言えば、求めようとする有効桁数より一つか二つ多めの桁を使っておけば十分なのである。それ以上の桁を使った細かい計算は無意味になる。精度の低い測定値と精度の高い測定値を合わせて計算する場合にも、数値をまるごと使う必要はない。

 このあたりが心配な人は、ちょっと大きめの数字を使って次のような計算を試してみるといい。

\[ \begin{align*} 0.88 \times 0.88 &=\ 0.7744 \\ 0.88 \times 0.888 &=\ 0.78144 \\ 0.88 \times 0.8888 &=\ 0.782144 \\ 0.88 \times 0.88888 &=\ 0.7822144 \end{align*} \]
 この計算の場合、0.88 の有効桁数は 2 桁なので、いずれも小数第 2 位まで求めればいいわけだが、次々と桁数を増やして行くとどうなるかを試してみている。桁が増えるごとに 0.008、0.0008、0.00008 という大きめの変化があるわけだが、上から 2 行目以降、結果に大きな変化は見られない。有効桁数より一つ多めの桁で計算するだけでも十分なのだ。

 まだ気になるなら有効桁数を増やして試してみるといいだろう。

 電卓に長々と数字を打ち込むのは無駄だということが分かる。


五捨五入?

 業界によっては四捨五入ではなく五捨五入という耳慣れぬ端数処理を使うことになっていたりするようだ。四捨五入はよく知っているように 0, 1, 2, 3, 4 を切り捨て、5, 6, 7, 8, 9 を繰り上げるというルールだが、0 はそもそも切り捨てても切り捨てなくても変わらないのだから、僅かに数値が増える機会のほうが多いことになる。多量のデータを扱う場合、元の値の平均より、四捨五入をした後の平均のほうが僅かに増えてしまうわけだ。

 その弱点を補うために、ちょうど 5.0000・・・・となる場合に限り、繰り上げるか切り捨てるかの判定を状況によって変えるようにするというのが五捨五入である。判定基準は一つ上の位の数が偶数か奇数かというものである。偶数なら切り捨て、奇数なら繰り上げる。その結果、一つ上の位の数はいつでも偶数になる。2.5 なら切り捨てて 2 にして、3.5 なら繰り上げて 4 にする、といった具合だ。

 よっぽど細かいことが問題になる統計処理をするのでなければここまでする必要はなくて、四捨五入で構わない。


これらの作法の妥当性

 さて、ここまでに紹介した作法にはどれほどの根拠があるのだろうか。じっくり考えていくと、怪しい点が幾つか見えてくる。

 最終桁には誤差を含むということだが、一体どの程度の誤差を想定しているのだろうか?幾つかの解説書では最終桁の数値に ±0.5 くらいの幅のズレがあることを仮定した例を挙げていることが多い。例えば 2.5 と書いてあれば、2.45 〜 2.55 くらいを想定しているのである。今回の話の冒頭の例でもそのようになっている。

 この仮定のもとで二つや三つの数値を足し合わせるくらいなら許容できるくらいだが、10 を超えるデータを足し合わせるとなると、誤差の程度はどんどん大きくなっていくのではないだろうか。一つ上の桁まで怪しいくらいになってきてしまう。それでも構わないのだろうか?

 さらに、冒頭の例でもそうなっているのだが、掛け算や割り算を行うと、有効数字の最終桁の数字が前後に一つや二つズレるくらいの範囲で幅を持つということが普通に起こり始める。最終桁はほとんど信用ならない、という感じの状況だ。

 先ほど最終桁の数値に ±0.5 くらいの幅のズレがあることを仮定するものが多いと書いたが、実際の測定では最終桁にはもっと大きな誤差が含まれる状況が考えられる。測定値の最終桁は、前後に 2、3 くらいはズレていることだってあるのだ。そのような仮定で掛け算や割り算を試してみると、今回の作法にはもうほとんど根拠がないのではないかと思えるほどにズレが出てくる。

 もう一つ気になることがある。例えば、同じ有効数字 3 桁でも、1.00 と 9.00 では誤差の度合いに大きな違いがあるような気がする。ここに含まれる絶対的な誤差は同じ程度かもしれない。しかし値全体に対する誤差の割合を考えると違っている。相対誤差と呼ばれる概念だ。掛け算をするときには、その影響が大きく出たり小さく出たりするのである。

 このように問題だらけな気がするが、今回の作法は果たしてどのような理屈で正しいと認められるのだろうか?


ルートや対数はどうなる?

 ここで説明したのは加減乗除を使うときの作法だけである。しかし現実にはルートや対数を計算したくなることもあるだろう。その場合には有効数字はどうやって決めたらいいのだろうか?

 それを知るためには、「誤差の伝播」に関する理論を学ぶ必要がある。そしてそれを学ぶと、今回説明した加減乗除の作法もかなりいい加減なものであることを知ることになるだろう。先ほど、この手法への疑いをあれこれ述べたが、全くその通りだったと分かるのである。


実は時代遅れ

 今回紹介した作法は、あまり数値の正確さが問題とならない場面でこっそり使うものであると言えそうだ。つまり、誤差を大雑把に、ある程度は考慮しているかのように見せかける、その場しのぎの方法に過ぎないのである。何もやらないよりは、やったほうがいい、という程度のものだ。

 近頃は測定や統計に関する従来の慣行の曖昧さが反省され、「不確かさ解析」というものが重視されてきているため、ここで紹介した作法は今後は完全に廃れる可能性がある。もはや大学受験用だけのローカルルールとなってきている感じもある。

 それを裏付けるように、Wikipediaの「有効数字」の項目を見ても、今回のような作法については全く載っていない。Wikipediaには次のような記述がある。

 『第一に、計量学や統計学の専門家でない方々は、むしろ有効数字の有用性を過剰に考えすぎで、高校や大学の化学テキストでは研究室での実状に比べて過剰に受け止められている』

 意訳すれば、「有効数字だけで誤差を論じられるわけではないのに、位取りの作法を神聖視してしまってはいないか?」ということだ。

 誤差の伝播の理論については次の記事で紹介する予定である。