[解決済み] クロスプラットフォームの任意精度の数学ライブラリで、移植性の高いものは?[クローズド]
質問
CまたはC++で良い任意精度の数学ライブラリを探しています。あなたは私にいくつかのアドバイスや提案を与えることができますか?
主な要件です。
-
それは でなければならない 任意の大きさの整数を扱えること-私の主たる関心は整数です。任意に大きなという言葉が何を意味するのか分からないという方のために、100000!(100000の階乗)のようなものを想像してみてください。(100000の階乗)のようなものを想像してみてください。
-
精度は は必要ありません。 をライブラリの初期化時やオブジェクトの生成時に指定する必要はありません。精度は のみです。 のみで、システムの利用可能なリソースによって制限されるべきです。
-
それは でなければならない はプラットフォームの能力をフルに活用し、「小さな」数をネイティブに処理する必要があります。つまり、64ビットプラットフォームでは、(2^33 + 2^32)の計算は、利用可能な64ビットCPU命令を使用する必要があります。ライブラリは ではありません。 は、同じプラットフォームで (2^66 + 2^65) と同じ方法でこれを計算してはいけません。
-
それは でなければならない は、加算を効率的に処理する (
+
)、減算(-
)、掛け算 (*
), 整数除算 (/
)、余り(%
), べき乗 (**
) 、インクリメント (++
), デクリメント (--
)、GCD、階乗、その他一般的な整数演算を行うことができる。平方根や対数など、整数の結果が出ない関数を扱えることはプラスになります。また 記号計算 を扱えることはさらに良いことです。
これまでに見つけたものを紹介します。
-
Java 's BigInteger そして 大きな十進数 というクラスがあります。これまで、これらを使ってきました。ソースコードを読みましたが、その下の数学は理解できません。私が学んだことのない理論やアルゴリズムに基づいているのかもしれません。
-
のコアライブラリでは、組み込みの整数型や bc , Python , ルビー , ハスケル , Lisp , Erlang , OCaml , PHP その他いくつかの言語。私はこれらのいくつかを使用したことがありますが、どのライブラリを使用しているか、どのような実装を使用しているかは全くわかりません。
既に知っていること
-
使用方法
char
を小数点以下の数字に、そしてchar*
を使い、その桁数で計算をします。for
-ループを使う。 -
使用する
int
(またはlong int
またはlong long
) を基本的な「単位」とし、その型の配列を任意の長さの整数とし、その要素に計算を行うにはfor
-ループで要素に対して計算を行う。 -
整数型を使って、10進数(または数桁)の数字を BCD (2進コード化された10進数) .
わからないこと
-
素朴な方法を使わずに、上記の2進数配列を10進数で表示すること。素朴な方法の一例。(1) ビットの低い方から順に、1, 2, 4, 8, 16, 32, ...と加算していく。
char*
-文字列を使用して、中間の10進数の結果を保存する)。
感謝すること
-
私が読むべき本や記事の良い提案。例えば、「某有名企業」が「某有名企業」を「某有名企業」に変身させる方法を図解入りで教えてくれたり。 素人 2進数から10進数への変換アルゴリズムがどのように機能するかについて、図解があるとよいでしょう。記事 " 限られた精度での2進数から10進数への変換 " by Douglas W. Jones は良い記事の一例です。
-
一般的なあらゆるヘルプ。
お願い
をしないでください。
を使用することが適切であると思われる場合は、この質問に答えてください。
double
(または
long double
または
long long double
) を使えば、この問題は簡単に解決できる。もしそう考えるなら、あなたはこの問題を理解していないことになります。
どのように解決するのですか?
GMPが一般的です。 Squeak Smalltalkには非常に素晴らしいライブラリがありますが、Smalltalkで書かれています。
関連する書籍や論文の紹介をお願いしました。 ビグナムでやっかいなのは長割です。 Per Brinch Hansenの論文をお勧めします。 Multiple-Length Division Revisited: 地雷原を巡る旅 .
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] C++の識別子でアンダースコアを使用する場合のルールについて教えてください。
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み】C++17の新機能は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む