4

float または double を使用した浮動小数点計算はハードウェアで実行されるため、ここで説明するように、異なるアーキテクチャまたは最適化設定で異なる結果が得られる場合があります。

そのスレッドで簡単に言及されたものの、完全には回答されていないことの 1 つは、System.Decimal の場合です。System.Decimalは一貫した浮動小数点型として使用される可能性があり、非常に低速であり、.NET が提供する数学関数 (System.Math) は System.Decimal には実装されていないことが言及されました。

このタイプについて私が見つけた他の情報は、Marc Gravellがソフトウェアに実装されていると述べていることだけでした。これは、実際に一貫性があることを強く示唆しています。

したがって、私の質問は、System.Decimal を使用してすべてのハードウェア プラットフォームで一貫した結果を得ることができるか、または System.Single および System.Double と同じ問題が発生しやすいかということです。

System.Decimal に一貫性がある場合、超越関数 (cos、sin、tan、sqrt、log など) を実装する無料のライブラリはありますか?

4

1 に答える 1

2

はい、すべての .NET 実装で同じ結果が得られるという点で一貫性があります。

操作の正しい結果を常に表す方法で一貫性があります。浮動小数点は、何らかの値を表すのに問題があります。System.Decimalは、10 進数として正確に表される数値のみを正確に表すことができます。たとえば、1/3 は 0.33333 として不正確に表されます......そして、cos、sin、tan、sqrt、および log の多くの結果は、次の理由により近似値になります。数値システム (10 進数や 2 進数など) には、最も近い近似値としてしか表すことができない多くの値があるという事実。

C# の仕様には次のように書かれています。 The result of an operation on values of type decimal is that which would result from calculating an exact result (preserving scale, as defined for each operator) and then rounding to fit the representation. Results are rounded to the nearest representable value, and, when a result is equally close to two representable values, to the value that has an even number in the least significant digit position.

于 2012-12-12T08:36:13.077 に答える