問題タブ [mpir]
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.
c++ - C++ MPIR/MPFR 相互運用性
私は非常に大きな整数を扱うプロジェクトに取り組んでおり、これまでプロジェクト全体でGMPlibに基づいてMPIRライブラリを使用してきました。
MPIR に含まれていない対数関数が必要になりました。同じく GMPlibに基づく別のライブラリMPFR には、これがあります。
両方とも整数クラスを持ち、名前も似ています。MPIR には mpz_t があり、MPFR には mpfr_t があります。両方を見ると、GMPlib の同じ基本クラスに基づいているように見えます。
ログ関数を使用するために、MPIR の整数を MPFR 整数に何らかの方法で変換することは可能ですか? もちろん、仲介者として文字列を使用するのは洗練されていない方法ですが、これにはかなりの数秒かかります。どんな助けでも大歓迎です。
コンテキストが役立つ場合は、次のロジックを実装しようとしています: n 未満の 2 の最高乗。
c++ - x64 でコンパイルすると、平方根ファインダー (c++ で記述された mpir を使用) が複数の lnk2019 コンパイル時リンカー エラーで失敗する
最近はC++で高精度な数値計算をやっています。gmp (gnu 多倍精度) フォーク mpir (多倍精度整数と有理数) を使用して 2 の平方根を計算するプログラムを作成しています。Win32 モードでプログラム (1 ファイル、約 100 行) をコンパイルすると、コンパイルして正常に実行されますが、x86 モードでオーバーフローが発生し始めたとき、より高い精度の計算を期待して x64 に切り替えてみました。コンパイルしようとすると、「関数 wmain で未解決の外部シンボル __gmpf_get_str が検出されました」など、8 つの非常によく似たリンカ エラーが発生しました。msdn やスタック オーバーフローなどの場所を検索して検索しましたが、何時間も費やしたにもかかわらず、そのような運はありませんでした。コードは次のとおりです。
visual-studio - vsyasm を自動的にインストールする方法
Microsoft C++ を使用して Windows で mpir を自動的にビルドする方法を作成しようとしています。必要なステップの 1 つは vsyasm をインストールすることのようです。そのため、私の現在のミニ プロジェクトは、それを行うための自動化された方法を作成することです。つまり、人間の介入なしにバッチ ファイルまたはプログラムで実行できるものです。
vsyasm の readme では、次の 3 つの方法が提案されています。
1 つ目は、Windows セキュリティによってブロックされます。手動の介入を必要としない方法はありますか?
2 番目と 3 番目は、手動で直接介入する必要があります。特にIDE内ではなくコマンドラインからプロジェクトをビルドしたい場合、自動化された同等のものはありますか?
私が見逃している他のオプションはありますか?
c++ - エラー C2177 の取得: MPIR では定数が大きすぎます
MSVS 2010 を搭載した Widows 7 での実行
MPIR ライブラリを使用して 2 つの大きな整数を加算する方法を理解するために、このチュートリアルに従っています。
このライブラリは、以下のプログラムに示すように、非常に大きな数を追加するのに役立つはずです。
しかし、それでも私は得る error C2177: constant too big
。MPIRを誤解していませんか?
c++ - C++ MPIR: mpz_sizeinbase(); の使用例を探しています。
MPIR ライブラリを使用するのはこれが初めてです。bigintegers でいくつかの計算を行う必要があります。実際には、これらの数値の最大値は 2048 ビットです。実装しなければならない最初のタスクは、入力された 10 進数値の合計ビット数を見つけることです。これには、対数の使用が必要です。
MPIR ライブラリで、これは与えられた基数の合計桁数を与える単純な関数であり、MPIR では利用できない対数を見つける代わりになることがわかりました。
指定された基数の桁数で測定された op のサイズを返します。base は 2 ~ 36 の範囲で指定できます。op の符号は無視され、絶対値のみが使用されます。結果は、正確または 1 が大きすぎます。base が 2 の累乗の場合、結果は常に正確になります。op がゼロの場合、戻り値は常に 1 です。この関数を使用して、op を文字列に変換するときに必要なスペースを決定できます。適切な割り当て量は、通常、mpz_sizeinbase によって返される値よりも 2 大きく、マイナス記号用に 1 つ、ヌル ターミネータ用に 1 つ追加されます。mpz_sizeinbase(op,2) を使用して、1 から数えて op の最上位 1 ビットを見つけることができることに注意してください。 (0 から始まるビット関数とは異なり、セクションを参照してください
私は自分のプログラムでこの関数を次のように使用しようとしています:
答えは 3 のはずです。
しかし、コンパイル中に次のエラーが発生します。
エラー 13 エラー C2440: '=': 'int' から 'mpz_t' に変換できません logicaloperations.cpp 27 1 logicaloperations
エラー 14 エラー C2664: '__gmpz_sizeinbase': パラメーター 1 を 'int' から 'mpz_srcptr' に変換できません logicaloperations.cpp 28 1 logicaloperations **
これはテスト用です。実際のコードでは、次のような値になります。
この関数のパラメーターを正しく使用する方法を教えてください。
例で十分でしょう。
c++ - コードで mpir_ui タイプを使用する際の問題
この機能を使いたかった
そのためには、mpir_ui を提供する必要があります
だから私がこれを宣言しようとするときはいつでも、
それは言います:
ヘッダーファイルがありませんか?
他のすべてのタイプと機能は機能しますが、これだけが失敗しています。
これらは私のヘッダーファイルです
c++ - mpz_t (MPIR) に割り当てるスペースはどれくらいですか?
自分の番号が何桁になるか知っていると仮定すると (そして、最初に適切な量のスペースを割り当てたいのですが、割り当てる必要があるバイト数をどのように計算すればよいでしょうか? 常に値を次のように設定できると思います。でも1*10^(num digits)
それ0
は気分が悪いし、私が目的を打ち負かしているように感じます。
n
わかりやすくするために編集: 10 進数の整数を格納するために必要なバイト数と、MPIR の実装がそれに影響するかどうかを知りたいです。@JonathonLeffler は、彼の回答に対するコメントで正しい回答を提供しました。
c++ - MPIR の mpf を使用した剰余/モジュラス
MPIRで数値が整数(またはそれに非常に近い)であるかどうかを確認する最良の方法は何だろうと思っています。で数値の平方根を取り、平方根mpf_sqrt()
が整数になるかどうかを確認したいと思います。Java では、それ.remainder()
を使用してBigDecimal
、残りが .99999 より大きいか、1.000001 より小さいかを確認します。しかしremainder()
、mpf の a またはモジュラスが表示されません。Visual Studio C++ を使用しています。すべての助けに感謝します!