高精度計算

ある特殊な分野のデータ集計を行っている企業さんから「どうも、計算結果が思わしくない」という相談を頂きました。
確かに数字は出ているが、もっと違う傾向が出そうな気がする、と。
集計ツールはエクセルマクロ(VBA)で作られているという事で、中身を拝見させて頂きました。
プログラムを調べていくと、直ぐに課題を発見しました。これは確かに「思わしくない」になるでしょう。
人類は、「100.0 + 0.01」を筆算で計算できます。答えは「100.01」です。エクセルでも計算結果は同じです。
では、「100000000000.000000000 + 0.000001000」ではどうでしょうか。
筆算であれば、答えは 「100000000000.000001000」です。
エクセルの計算結果は、「100000000000.000000000」になってしまいます。

どうして筆算とエクセルで結果が異なるのか。これは情報工学的に簡単に表現すると「浮動小数点の精度が不足した」の様な話になりますが、一般的な表現だと「ざっくり丸めた」になるでしょう。
エクセルは、極めて大きな数字と小さな数字が同時に出てきた場合、小さい方を無視してしまうのです。
この種の問題は、なかなか表に出てこないので、発見が困難です。そもそも、大きな数字と小さな数字で計算するというケースは極めてマレでしょう。
上記事例は小数を使っていますが、例えば国家規模の財政状況に一般家庭の家計簿を押し込んだりすると、同じ様に家計簿の数字は埋もれて見えなくなってしまうでしょうね。
今回は、原因を発見できたのですが、抜本的な対策にまでは至りませんでした。計算の本体部分を大々的に修正する必要があり、これは小手先でどうこうできるものではありません。
情報工学的には
・計算の仕組みを工夫する
・専用ライブラリを導入する
という2つの方法があります。
前者は諸々の計算パターンを分析する必要があり、ちょっと現実的ではありません。
そのため、将来的には後者を導入するという方針を定め、徐々に準備を進めています。