web-dev-qa-db-ja.com

C#でSystem.Decimalを使用した数学演算

I need 10進数で標準の数学関数を使用できるようにします。精度は非常に重要です。 doubleは受け入れ可能な置換ではありません。 C#で10進数を使用して数学演算を実装するにはどうすればよいですか?

編集私はSystem.Decimalを使用しています。私の問題は、System.MathSystem.Decimalで機能しないことです。たとえば、次の関数はSystem.Decimalでは機能しません。

  • System.Math.Pow
  • System.Math.Log
  • System.Math.Sqrt
23
MintGrowth

ええと、 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)ライブラリ。シンボリック代数および数値/科学計算のための自己完結型のクリーンなフレームワークを提供することを目的としています。

2) Microsoft®.NETアプリケーション用のIMSL™C#数値ライブラリ (有料)

3) 。NET用の極端な最適化数学ライブラリ

16
Brian MacKay

DecimalMathdecimal引数のアナロジーでSystem.Mathクラスのすべての関数が含まれています

注:これは私のライブラリであり、いくつかの例も含まれています

7
Ramin Rahimzada

あなたは私たちに質問に答えるのに十分な情報をほとんど与えていません。

10進数と倍精度はどちらも不正確です。 表現エラー小数の==はゼロ表現される量が形式の分数に正確に等しい場合(x/10n)xとnの適切な選択。数量が形式の分数(x/2)に正確に等しい場合、doubleの表現エラーはゼロです。n)xとnの適切な選択についても同様です。

扱っている数量がその形式の分数でない場合は、表現エラー、期間が発生します。特に、平方根を取ることに言及します。多くの平方根は無理数です。分数形式がないため、分数を使用する表現形式では小さなエラーが発生します。

あなたがしていることをもっと詳しく説明できますか?

6
Eric Lippert