誰かが任意の大きな数で処理(操作などを行う...)するための優れたC ++ライブラリについて教えてもらえますか(任意の精度の浮動小数点数を処理するライブラリでもかまいませんが、整数の処理がより重要です)?
あなたが使用したライブラリのみを参照し、それをどのように設定してピックアップしたかを教えてください。おそらく非常に最小限の例か何かで(基本的に、言及されたライブラリに優れたドキュメントがない場合は、独自の入力を提供します)。
記録として、x64マシンでWindows 7を使用し、IDEとしてCodeBlocksを使用し、コンパイラーとして最新のMinGWを使用しています。
私が試したライブラリ:
vlint(十分な操作ではありませんが、小さなものには問題なく動作します)
bigint(セットアップが簡単で、エラーをコンパイルし、ドキュメントがあまりない(エラーが発生する可能性がある))
ttmath(有望と思われ、いくつかのBIGサンプルプログラムをコンパイルし、コンパイルエラーのためにいくつかの修正を実行しました。事実上ドキュメントがないため、構文が理解できません)
gmp(設定すらできませんでした)
ps Stackoverflowで何度も質問される理由を基本的に説明している「質問の暴言」を削除して、人々が最後まで読んでくれるようにしました。
->更新
だから私は最初の質問に対する直接の答えではない答えを選びましたが、これを解決するのに大いに役立ちました、そして私は私のような他のc++初心者が苦労することなく非常に大きな数で働き始めるのを助けるために私の発見のいくつかを投稿します私が簡単なステップバイステップのマイクロガイドで行ったような数日間のライブラリ。
私が使用していたもの(ガイドに従うためにこれを覚えておいてください):
Windows 7 Ultimate x64
Amd k10 x64(一部のライブラリはこれで動作しません、他のライブラリは異なる動作をします、他のライブラリはamd k10にカスタム調整されているので、これは私が使用したライブラリだけでなく、おそらく他のライブラリでも役立ちます)
Code :: Blocks 10.05 MinGWを含まないバージョン、ファイル名「codeblocks-10.05-setup.exe」(C:\ Program Files(x86)\ CodeBlocksにインストール)
MinGWパッケージ(binutils-2.15.91-20040904-1.tar.gz gcc-core-3.4.2-20040916-1.tar.gz gcc-g ++-3.4.2-20040916-1.tar.gz mingw-runtime- 3.11.tar.gz w32api-3.8.tar.gz)C:\MinGWで抽出
TTMath0.9.2ファイル名"ttmath-0.9.2-src.tar.gz"を解凍し、フォルダー "ttmath"をフォルダー"C:\ CPPLibs"(c ++ライブラリを配置したフォルダー)にコピーしました。
すべてを設定するために何をすべきか
[コード:ブロック]>[設定]>[コンパイラとデバッガ]に移動します(ここでコンパイラが自動的に検出されました。これが発生しない場合は、[選択したコンパイラ]で[GNU GCCコンパイラ]を選択し、[デフォルトに設定]をクリックしてから[ツールチェーン]をクリックします「コンパイラのインストールディレクトリ」の「Executables」で、コンパイラのインストールディレクトリを選択するか、自動検出を試みることができます。「C ++コンパイラ」でソートした場合は、「mingw32-g++。exe」を選択または書き込みます。これで、「SelectedCompiler」で「GNUGCCCompiler」を選択して「SetasDefault」をクリックします。
「Code:Blocks> Settings>Compiler and Debugger」を離れずに、上記を整理して、「Search Directories」に移動し、「Compiler」をクリックして「Add」をクリックし、ライブラリを保存するフォルダまたは「次に、「ttmath」フォルダー(私の場合はC:\ CPPLibs)に移動し、「リンカー」に移動して同じことを行います。
「 ttmath」ライブラリでコーディングを開始する
#include <ttmath/ttmath.h>
には、メイン関数の前にこの行を配置する必要があります(注:64ビットシステムを使用している場合、この行の前にもこの行を配置しないと、多くのエラーが発生します。苦労している他の人が見つけてウェブに投稿し、それが私のために働いたという修正を見つけるまで、このがらくたに苦労しています)ps私はそれが64ビットシステム専用だと思いますが、「ttmath .h"ヘッダーファイルが原因である可能性が最も高いです。#define TTMATH_DONT_USE_WCHAR
#include <ttmath/ttmath.h>
大きな整数値を持つ変数の宣言
ttmath::UInt<n> a,b,c;
は、次のように行う必要があります。ここで、「a、b、c」は変数であり、「n」はこの形式の変数に格納できる数値のサイズです。「2 ^(32 * n)-1 "(32ビットシステムの場合)およびこの形式" 2 ^(64 * n)-1 "(64ビットシステムの場合)これを行う場合
a = 333;
(333の代わりの数値はc ++の「longint」標準データ型よりも大きい)、変数に値を割り当てると、以前に指定したサイズに関係なく、このような変数に値を割り当てるため、コンパイルされません。 integerは、c ++の「longint」標準データ型と同じくらい大きくなる可能性があります(私はこれを自分で考えましたが、難しい方法です)。これよりも小さい値を使用して、正常にコンパイルされた後、実行します。プログラムで、前述の「long int」標準データ型が処理できる数よりも大きい数をこの変数に書き込もうとすると、計算が間違ってしまうので、次の点に注意してください。変数に値を割り当てるには、あなたがそのようにそれを割り当てなければならない方法a = "333";
(はい、私はあなたがそれをこのように文字列として扱っていることを知っていますが、それは何の問題もなく問題なく動作します、そしてあなたが変数を「cout」することを決定した場合、それはあなたが使うように指数または科学的記数法の結果になることは決してありませんいくつかの「追加のステートメント」と組み合わせずに標準の整数データ型を使用して、適切な数を表示します)
psこの単純なルールを使用して整数とこのライブラリを操作すると、15〜20秒で単純なプログラム(コーディングに3分ほどかかりました)で100.000番目までのフィボナッチ数を計算し、その数は3ページのように占有されました。実用的なライブラリがどのように機能するかを理解すると(以前はほとんど助けがなかったので、ttmath Webサイトのサンプルのいくつかはかなり誤解を招く可能性がありますが、今は助けがあります)、それもかなり効率的であるように見えます。サイズ(「n」)を10000から50000に増やし、数値がサイズを保持し、最初と最後の桁が同じだったため、おそらく正しいでしょう。これは私が使用したソースコードです。テストのためだけに整数サイズに非常に大きな数値を使用しました。プログラムがどの長さで開始するかを実際に確認するのは面倒ですが、10.000番目のフィボナッチ数までの長さは、これまでにプログラムを「cout」にするため、定義した長さを超えないことを知っています。結果は10.000に達し、常に成長していました。また、プログラムを一時停止する前にシーケンスの最初の番号を確認し、「数字が大きくなる」のを見て、シーケンスの最初のフィボナッチ数を確認しました。これらは正しいものでした。注:このソースコードには、知りたいフィボナッチ数列の番号のみが表示されます。コメント行のコメントを外した場合にのみ、「増加している」番号が表示されます。
#define TTMATH_DONT_USE_WCHAR
#include <ttmath/ttmath.h>
#include <iostream>
using namespace std;
int main () {
int fibonaccinumber;
cin >> fibonaccinumber;
cin.ignore();
ttmath::UInt<10000> fibonacci1,fibonacci2,fibonacci3;
fibonacci1 = 1;
fibonacci2 = 1;
//cout << "1. " << fibonacci1 << "\n2. " << fibonacci2 << "\n";
for(int i=3;i<=fibonaccinumber;i++)
{fibonacci3 = fibonacci1 + fibonacci2;
// cout << i << ". " << fibonacci3 << "\n";
fibonacci1=fibonacci2;
fibonacci2=fibonacci3;}
cout << "the " << fibonaccinumber << "th fibonacci number is " << fibonacci2;
string endprog;
getline(cin,endprog);
return 0;}
私はまだこのライブラリの任意精度の浮動小数点数をいじっていませんでしたが、コメントと回答に感謝し、人々がそれに興味を持っていることがわかったら、このガイドを拡張し続けます。