BigDecimal
java.math
は、特定のスケールの大きな数を処理するための多くの利点を持つパッケージのクラスです。この機能を備えた C# に同等のクラスまたはデータ型はありますか。
7 に答える
つい最近、C#で任意精度の小数も必要になり、 https://stackoverflow.com/a/4524254/804614に投稿されたアイデアに出くわしました。
次に、すべての基本的な算術演算子と比較演算子、およびすべての一般的な数値型とその時点で必要だったいくつかの指数法との間の変換をサポートするドラフトを完成させました。
それは確かに包括的ではありませんが、非常に機能的で、ほとんどすぐに使用できます。これは一晩のコーディングの結果であるため、これがバグがないか完全に正確であるかどうかは保証できませんが、私にとってはうまくいきました。とにかく、ここで公開したいのは、C#で任意精度の小数を使用する他の方法が見つからなかったためです。大規模なライブラリ(ほとんどの場合、.netでさえありませんが、c ++のラッパー)を含める必要はありません。もの。
基本的な考え方は、.NET 4.0のBigIntegerタイプと10進数の指数(Int32)を使用して、任意の大きな仮数を持つカスタム浮動小数点型を作成することです。
バグや誤りを見つけたり、提案や建設的なものがあれば、私の投稿を直接編集するか、コメントを残してください。回答を改善できるようになります。
これがこの場所を配置するのに最適な場所であるかどうかは完全にはわかりませんが、これはこのトピックに関するSOの上位の質問の1つであり、私の解決策を共有したいと思います。;)
編集:実装をGitHubGistに移動しました:https ://gist.github.com/JcBernack/0b4eef59ca97ee931a2f45542b9ff06d
C# はBigInteger
それをビルドしただけです (.NET Framework 4 で)。
タスクの精度はdecimal
十分ですか? これは、±1.0 × 10 −28から ±7.9 × 10 28の範囲の値を保持できる 128 ビットの数値です。
探していることを実行する BigNum という C# ライブラリがあり、場合によっては追加機能があります。
たとえば、BigDecimal にはない平方根関数があります。
PrecisionSpec precision = new PrecisionSpec(1024, PrecisionSpec.BaseType.BIN);
BigFloat bf = new BigFloat(13, precision);
bf.Sqrt();
Console.WriteLine(bf.ToString());
ウィキペディアには、http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Librariesに他のそのようなライブラリのリストがあります。
ソース:
- BigNum ライブラリは、もともとhttp://www.fractal-landscapes.co.uk/bigint.htmlでホストされていましたが、そのサイトは 2012 年以降ダウンしています (その後、ある時点で復活しました)。
- サイトのアーカイブはhttp://web.archive.org/web/20110721173046/http://www.fractal-landscapes.co.uk/bigint.htmlにあります。
- http://www.mediafire.com/file/6axoicc6iszp4sg/BigNum.zip/fileにソース コードのコピーがあります。
BigDecimal (存在する場合) をサポートするサードパーティ ライブラリを使用する以外に、簡単な回避策はありません。私に関する限り、最も簡単な方法は、10 進数の実装 (たとえばモノから) を取得し、BigInteger 型を使用してそれを書き直すことです。内部的に、mono の実装では、10 進数型は 3 つの整数から構成されます。したがって、それを実装するのは難しいとは思いません。ただし、効率についてはわかりません。ただし、 codekaが言及したように、最初に標準の 10 進数型の使用を検討する必要があります。
デビール数学
GitHub:
https://github.com/deveel/deveel-math
著者のGitHub:
サポート:
- ビッグコンプレックス
- BigDecimal
- ビッグマス
- 合理的な
- ...
インストール方法
NuGet パッケージ管理コンソールから、ライブラリをインストールするプロジェクトを選択し、次のコマンドを入力します。
PM> Install-Package dmath