Q&A 44

数値型の値の除算について


数値の割り算による有効桁数について

電卓で,100÷3×3 を計算するとどうなるでしょう。電卓によっては,答が 99.999… になるものと 100 になるものとがあります。Windows に添付されてくる電卓では 100 になります。DBPro の整数型の値に対して同じ計算をすると,答は 99 になります。これは,計算途中の 100÷3 の結果が 33 に丸められてしまうからです。ところが,数値型の値に対して同じ計算を行なうと,答は 100 になります。

DBPro の数値型の仕様をよく見れば,有効桁は 20 桁となっているので,100÷3 は

33.333333333333333333

となるはずで,これを3倍した結果は

99.999999999999999999

となるはずです。こうならないのは,DBPro の数値型では,答を 100 にする電卓と同じような処理を行なっていて,なるべく丸めによる切捨てを吸収しようとしているからです。

数値型項目に対して

#整数([a]/150*[b])

のような書き方をし,[a] を必要な有効桁に丸めてうまく端数を捨てさせようとしてもうまくいきません。このような処理を正しく行なわせるためには,希望する切捨て位置 n を知った上で,例えば次のようにしなければなりません。

#切捨て(#切捨て([a]/150, n)*[b])

財務計算などでは,必要な有効桁が決まっています。そして,100÷3×3 の答が 99.999… になる電卓を想定して,最後に切り捨てるように推奨していることがありますが,電卓によってはそれは正しくありません。DBPro では,割り算などのつど,その有効桁で注意深く切り捨てたり,四捨五入したりしながら計算しないと正しい結果が得られないことがあります。