I need 10進数で標準の数学関数を使用できるようにします。精度は非常に重要です。 double
は受け入れ可能な置換ではありません。 C#で10進数を使用して数学演算を実装するにはどうすればよいですか?
編集私はSystem.Decimal
を使用しています。私の問題は、System.Math
がSystem.Decimal
で機能しないことです。たとえば、次の関数はSystem.Decimal
では機能しません。
ええと、 Double は 浮動小数点 数学を使用します。これは、3Dグラフィックスなどの三角法を実行していない限り、求めているものではありません。
除算などの単純な数学演算を実行する必要がある場合は、 System.Decimal を使用する必要があります。
MSDNから: Decimalキーワードは、128ビットのデータ型を示します。浮動小数点型と比較して、10進型は精度が高く、範囲が狭いため、財務および金銭の計算に適しています。
更新: いくつかの議論の後、問題は、Decimalsを使用したいということですが、System.Mathは、いくつかの重要な機能に対してDoublesしか使用しません。残念ながら、高精度の数値を使用しています。Decimalは128ビットで、Doubleは64ビットしかないため、変換すると精度が低下します。
System.MathがDecimalを処理するようにするためのいくつかの可能な計画があるようですが、まだそこにはありません。
私は数学ライブラリを少しググってみましたが、ついに削除されたStackOverflowの質問を見つけました。そこでは、TheVillageIdiotが次のライブラリについて言及していました。
1) Mathdotnet 、C#/。Netで記述された数学的オープンソース(MIT/X11、LGPL&GPL)ライブラリ。シンボリック代数および数値/科学計算のための自己完結型のクリーンなフレームワークを提供することを目的としています。
DecimalMathdecimal
引数のアナロジーでSystem.Math
クラスのすべての関数が含まれています
注:これは私のライブラリであり、いくつかの例も含まれています
あなたは私たちに質問に答えるのに十分な情報をほとんど与えていません。
10進数と倍精度はどちらも不正確です。 表現エラー小数の==はゼロ表現される量が形式の分数に正確に等しい場合(x/10n)xとnの適切な選択。数量が形式の分数(x/2)に正確に等しい場合、doubleの表現エラーはゼロです。n)xとnの適切な選択についても同様です。
扱っている数量がその形式の分数でない場合は、表現エラー、期間が発生します。特に、平方根を取ることに言及します。多くの平方根は無理数です。分数形式がないため、分数を使用する表現形式では小さなエラーが発生します。
あなたがしていることをもっと詳しく説明できますか?