問題タブ [gmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 10^x から 2^x への大整数基数/基数変換
序文
私は自分の BigInt ライブラリを作成して改良することで、コンピューター数学について学んでいます。これまでのところ、私の最初の化身は、10 進数のすべての数字をベクトルの連続する要素に格納しています。任意の精度で乗算および加算できます。基数 2^x に変換することにより、標準 C++ データ型で使用できるすべてのスペースを使用して、速度を上げたいと考えています。
情報
基数 10 の stdin から 1000 桁以上の数字を読み取っていますが、それらを基数 2^x に変換したいので、標準 C++ データ型のいずれか (unsigned int など) の配列またはベクトルに簡単に格納できます。基数変換、剰余法による繰り返し除算を行う方法について、私は1つのアイデアしか持っていません。そのメソッドを説明する C++ コードを次に示します。
難問
私が迷っていることのいくつかは、剰余による除算が大きな整数で基数変換を行う適切な方法であるかどうかです。GMPライブラリがどのようにそれを行うかを見てみました。gmp/mpn/generic/set_str.cは、「魔法」が発生する関連する c ソース ファイルですが、そこで何が起こっているのかはわかりません。Matt McCutchen のBigIntは、剰余法による除算の繰り返しを使用しているようです。この方法を使用する場合、基本的に BigInt クラスの 2 つのバージョンを作成する必要があります。
結論
- 膨大な数を文字列から 32 ビット ワードの配列に変換する適切な手順についてアドバイスを提供してください。
- GMP が文字列を 32 ビット ワードの配列に変換する方法を、抽象化の多くのレイヤーを経由せずに学習するのを手伝ってください。
例 4 ビット ワード サイズの使用
保存したい番号 (明らかに小さいサイズで): 123456789
符号なし文字の範囲は 0 ~ 255 です。数値を分割してベクトルに格納する場合は、次の 3 つの方法のいずれかを実行できます。
- 底が 10 であるため、ベクトルは [1,2,3,4,5,6,7,8,9] のようになります。
- これは、私の最初の実装での私のベクトルの外観です。
- 基数 100 として、ベクトルは [1,23,45,67,89] のようになります。
- 基数 10 から基数 100 への変換が簡単で、ciel (基数 10/2 の数字) 要素があります。
- 基数 256 として、ベクトルは [7,91,205,21] のようになります。
明らかに、3 番目のソリューションが内部表現に最適であり、私が目指しているものです。
gcc - 古いバージョンのgccをコンパイルします
CentOS 5.5OSでgccバージョン4.1.2200080704(Red Hat 4.1.2-50)を使用してgccバージョンgcc4.3.2をコンパイルしようとしています。当初、コンパイラはgmpおよびmpfrライブラリが必要であると不満を漏らし、それらはダウンロード、コンパイル、およびインストールに成功しました。
インストール後、使用された新しいconfigureコマンドは次のとおりです。
../gcc4.3.2/gcc-4.3.2/configure --prefix = / home / shahw / gccdir / --with-gmp = / usr / local / --with-mpfr = / usr / local /
次のエラーが発生しました。
config.logには、最後に次のものが含まれています。
潜在的な解決策に向けたヒントをいただければ幸いです。
c++ - C++ で gpmlib を使用して基数 10 の仮数と指数を抽出する方法
gpmlib を使用して、C++ で double の仮数と指数を抽出する必要があります。
例: double a = 1.234;
a = 1234e-3になるように、1234を仮数として、3を指数として抽出したいと思います。gpmlib はこのタイプの関数をサポートしていると聞きました。このライブラリへのアクセス方法がわかりません。
このライブラリを使用したサンプル コードを共有してください。
import - GMPのインポート/エクスポート
インポート/エクスポートGMP 機能に問題があります。負と正の Big Integer を変換しようとしましたが、負の数を扱うと符号が失われます。それについての例はありますか?
書き出す:
輸入:
c++ - GMPによる任意精度演算
私はGMPライブラリを使用して円周率プログラムを作成しています。これは約7兆桁の円周率を計算します。問題は、小数点以下の桁数を保持するために必要なビット数がわからないことです。
c - C Number バイト表現
bigintをunsigned char vector mynumber[]
表す があります。この数値は正であり、負の数値に変換したいと考えています。
私はこの方法で試しました
ベクトルを繰り返しますが、合計する必要があります。どのように合計しますか?
オーバーフローした場合、どうすれば解決できますか?
私は GMP を使用しており、エクスポート後にベクトルを SHA256 に渡す必要があります。
最後に、インポート (GMP) を使用して、ダイジェストの結果を Big Number に変換します。
インポートでは、エクスポートと同じ問題があります。サインは重要です。
xcode4 - Xcode 4 で GMP を使用する -- リンクの問題
Xcode 4.0.2 のデモ C++ プロジェクトで GMP 5.0.2 ライブラリを使用しようとしていますが、リンクを機能させるのに問題があります。
私は StackOverflow の投稿のコメントを見て: Xcodeにリンカー フラグを追加すると、/usr/local/lib と /usr/local/include で GMP ライブラリとヘッダー ファイルが見つかり、それらをプロジェクト ターゲットにドラッグしました。これにより、プロジェクトはコンパイルできましたが、明らかにリンクできませんでした。私が得ているエラーは
次に何を試すべきかについての提案はありますか?ありがとう。
c++ - Linux 環境で C++ の数値として X ファイルを RAM に読み込むにはどうすればよいですか?
ファイルをRAMに単一の数値として読み込み、基本的な数学演算とビットシフトを実行する必要がある圧縮プログラムに取り組んでいます。GNU から gmp を見てきましたが、c/c++ への統合が非常に貧弱であるため、どこから値を読み込んで mpz_t 変数に入れればよいかわかりません。
c++ - uint64 を GMP/MPIR 数値に変換
Windows (MSVC 2010) で MPIR 2.4.0 を使用しており、mpz_t 番号に符号なし 64 ビット整数を追加しようとしていました。ただし、MPIR/GMP は 64 ビット整数と mpz_t の間の直接変換をサポートしていないようです。これは、uint64 を文字列に変換し、これを mpz_init_set_str で読み取る必要があるということですか? これはあまり魅力的ではなく、非常に速く見えるわけでもありません.2回の変換は無駄です.
何か見逃していましたか、それともここで使用するトリック/ハックは何ですか?
乾杯、
フィリップ
php - GMPおよび多数の算術演算のためのPHP構成
私はPHPを使用してprojecteuler.netでいくつかの問題を実行していますが、現在のPHPのインストールでは、いくつかの問題を実行するのに十分な長さまたは大きさの数値を計算できないことがわかりました。
StackoverflowとGoogleを介した初期の調査によると、非常に大きな数で数学を行うには、PHPの拡張機能をインストールする必要があります。提案されたそのような拡張機能の1つはGMPですが、GMPを使用するようにPHPインストールを構成する方法が完全にはわかりません。
私は現在、XAMPPをインストールしたWindows 7 64ビットを実行しています(バージョンは2.5だと思います)。現在のPHPビルドをGMPで動作するように構成する方法はありますか?どのように?!