どっちが正しい?

10を24で割ってそれに60をかける。
その答えに少数がある場合は切り捨てる。
この計算で今日仕事中話になりました。
10÷24×60
式に書くとこうなりますね。
これを解くと
10 × 60
——– = 25
24
少数は発生しないため25が解になりますね。
とっても簡単だと思います。
でも、それを言葉通りに解いてみると…、
10÷24=0.41666666666666666666…
計算するのにあたって少数第6位未満を切り捨てた場合
0.416666×60=24.99996で答えは切捨てが発生するので24
計算するのにあたって少数第4位未満を四捨五入した場合
0.416667×60=25.00002で答えは切捨てが発生するので25
答えが変わってきます。
コンピュータもその種類によってその演算方法が異なります。
コンピュータも桁を無限に持っているわけではないのでどこかで桁が落ちます。
そうすると人間が切捨てや四捨五入をするのと同じことがおきてしまいます。
これがコンピュータによって演算結果が違うということになることがあります。
10÷24×60の少数切捨て
答えは数学的には25
でも、コンピュータによっては24
今まで知らなかったのですが、コンピュータでは掛け算と割り算が混在する場合、掛け算を先にさせてしまうのが一般的だと言われました。
(※ビット数等による計算結果の誤差については注意はしていましたのでTOSHCAFEに来ていただいている元ユーザさん、元同僚の社員さんご安心を。)
でも僕はどうしてもそれが正しいとは思えない・・・。
少数を出させないようにするのが誤差を発生させないとは限らなくて、むしろ出る可能性のあるものはあらかじめその場合の想定をして少数の扱いを決めておかなくてはならないのだと思います。
状況によっては先に10÷24をする必要があるときもあると思うんです。
そうすると単純に計算式を書いてから計算すると答えが違ってきてしまうので注意が必要だという話でした。
因みに予断ですが、少数の扱い全般について私の前職のユーザさんにもお読みいただいているので補足させていただきます。
前職のシステムでは、一部税計算等を除き基本は少数は第2位まで求めるために第3位を四捨五入しておりました。
また、その値の扱いや考え方がお客様によって異なる可能性や性質のある場合は、その発生誤差をどのような形で集計させていただくか確認を取り、あらかじめ初期設定させていただいておりますのでご安心ください。

コメント