CまたはC ++で適切な任意精度の数学ライブラリを探しています。アドバイスや提案をお願いします。
主な要件:
これは、必要があります任意の大きな整数を、私の扱う主要な関心は整数です。任意に大きいという言葉が何を意味するのかわからない場合は、100000のようなものを想像してください!(100000の階乗)。
ライブラリの初期化またはオブジェクトの作成中に精度を指定する必要はありません。精度は、システムの利用可能なリソースによってのみ制約される必要があります。
それはすべきプラットフォームのフルパワーを利用し、ネイティブで「小さな」の数字を処理する必要があります。つまり、64ビットプラットフォームでは、(2 ^ 33 + 2 ^ 32)の計算には使用可能な64ビットCPU命令を使用する必要があります。ライブラリは、同じプラットフォームで(2 ^ 66 + 2 ^ 65)を使用する場合と同じ方法でこれを計算するべきではありません。
それは必要があり、効率的付加をハンドル(
+
)、減算(-
)、乗算(*
)、整数除算(/
)、残り(%
)、電源(**
)、インクリメント(++
)、デクリメント(--
)、GCD、階乗、及び他の一般的な算術計算整数。整数の結果を生成しない平方根や対数などの関数を処理する機能はプラスです。記号計算を処理する機能はさらに優れています。
これが私がこれまでに見つけたものです:
JavaのBigIntegerクラスとBigDecimalクラス:私はこれまでこれらを使用してきました。ソースコードを読みましたが、その下の計算がわかりません。それは私が学んだことのない理論やアルゴリズムに基づいているのかもしれません。
組み込みの整数型またはbc、Python、Ruby、Haskell、Lisp、Erlang、OCaml、PHP、その他の言語のコアライブラリ:これらのいくつかを使用しましたが、どのライブラリを使用しているかわかりません。彼らが使用している実装の種類。
私がすでに知っていること:
使用する
char
小数点以下の桁用とchar*
進文字列のため、および使用して数字上の計算を行うfor
-loopを。int
(または、、long int
またはlong long
)を基本的な「単位」として使用し、そのタイプの配列を任意の長整数として使用し、for
-loopを使用して要素の計算を行います。整数型を使用して、10進数(または数桁)をBCD(2進化10進数)として格納します。
私が知らないこと:
- 単純な方法を使用せずに、上記のバイナリ配列を10進数で出力します。単純な方法の例:(1)ビットを最低から最高に追加します:
char*
1、2、4、8、16、32 、…(2)上記の-文字列を使用して中間の小数の結果を格納します)。
私が感謝すること:
私が読むべき本や記事に関する良い提案。たとえば、ナイーブでない2進化10進変換アルゴリズムがどのように機能するかを示す図があればよいでしょう。ダグラス・W・ジョーンズによる「限られた精度での2進化から10進への変換」という記事は良い記事の例です。
一般的なヘルプ。
(または、、または)を使用するとこの問題を簡単に解決できると思われる場合は、この質問に答えないでください。そう思うと、問題の問題を理解できません。double
long double
long long double