1

私は大学で、有限精度環境で精度を最大化し、丸め誤差のリスクを軽減するために、(とりわけ) 数学的な実行を順序付ける方法を説明するコースを受講しました。

私たちは、通常の金利計算などを行う金融システムに取り組んでいます。誰かが精度の低下を最小限に抑えるために計算を構造化する方法を共有/思い出させてもらえますか?

たとえば、分割は避けなければならないことを私は知っています。また、割る時は、できれば一番大きい数から割る。

4

4 に答える 4

5

数値計算の基本ルールは、ほぼ等しい数を減算しないことです。乗算と除算は常に正確です。乗算または除算を実行する際に失われる精度は、最大で 1 ビットです。ただし、2 つの数値が n ビットに一致する場合、それらの減算で最大 n ビットの精度が失われる可能性があります。

このような減算を回避するためのあらゆる種類のトリックがあります。たとえば、x の値が小さい場合に exp(x) - 1 を計算する必要があるとします。(これは、利息の計算で行うことがあります。) x が非常に小さいため、exp(x) が 1 にコンピューターのすべての精度に等しい場合、減算は正確に 0 になり、結果の相対誤差は 100% になります。 . ただし、テイラー近似 exp(x) - 1 = x + x^2/2 + ... を使用すると、より正確な答えを得ることができます。たとえば、exp(10^-17) - 1 は完全に不正確ですが、1 項のテイラー近似である 10^-17 は非常に正確です。これが機能のような機能expm1です。log1pexpm1 ここの説明を参照してください。

数値の精度が気になる場合は、浮動小数点数の構造を理解して、何が安全で何が安全でないかを知る必要があります。

于 2010-10-19T13:59:10.043 に答える
5

金額はドルではなくセントを使用してください。

于 2010-10-19T14:00:40.737 に答える
3

精度の低下は、通常、浮動小数点バイナリ表現の使用に関連しています。金融システムでは、このような表現を使用せず、代わりに任意の精度の数値を使用する必要があります (Java の BigDecimal や .NET の decimal など)。それがあなたの最初の動きです。

于 2010-10-19T14:01:05.557 に答える
0

インターバル演算を使用する可能性もあります

于 2010-10-19T14:43:37.950 に答える