問題タブ [multiprecision]
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++ - オペランドが非常に大きい乗算
多倍精度モジュールを実装していますが、現時点では乗算で立ち往生しています。
私のアルゴリズムを実行するには、Haswell マイクロアーキテクチャを使用して 64 ビットの 2 つの符号なしオペランドを乗算し、結果をメモリ ブロックに格納する必要があります。「g++」を使用した実装と、「icpc」を使用した別のより効率的な実装を行っています。
結果の各半分にアクセスして、必要なメモリ ブロックに格納する方法がわかりません。乗算にアセンブリ命令を使用し、結果を格納する義務がありますか、または簡単な方法がありますか?
c++ - __asm__ ブロックを挿入して、非常に大きな数の加算を行います
私はプログラムを実行していますが、この時点で効率化する必要があります。Haswell マイクロアーキテクチャ (64 ビット) と「g++」を使用しています。目的はADC
、ループが終了するまで命令を使用することです。
CF
セットは初回追加のみですか?ADC
それとも私が指示をするたびにですか?
問題は、ループが実行されるたびに,が失われることにあると思います。これが問題である場合、どうすれば解決できますか?CF
r - R の倍精度複素数
R の複素数は次のように定義されます。
実際のケースと複雑なケースで複数の精度値を処理することを目的としたプログラムがあります。R は倍精度を直接サポートしていません。パッケージをインストールした後、Rmpfr
複数の精度値を定義し、新しい を使用して通常の関数を使用できましたmpfr objects
。
複素数も処理する関数があります。
問題: 電話がかけられない
複雑な関数定義では、これらが倍精度のみである必要があるためです。
多倍精度を使用して、R で複素数演算を行う方法はありますか?
c - 基数 2^16 の 255 ビット整数の精度乗算
で 255 ビット整数の精度乗算を実装したいと思いradix-2^16 in C
ます。
このような大きな数を として提示するよう提案されましたarray of bignumber[16] ( typedef uint16_t bignumber[16] )
。ただし、その背後にある直感はわかりません(typedef uint32_tでbignumber [8]にすることもできることを知っているため)。
では、これらの大きな数の乗算を実行するにはどうすればよいでしょうか? 結果を確認するには (たとえば、sage を使用)、これらの数値を 10 進数で出力する必要がありますが、その方法がわかりません。
概念を明確に説明するための助けをいただければ幸いです。
ありがとう
c++ - MPFR を使用した異なる精度の非正規数
さまざまなnビットのバイナリ浮動小数点形式をエミュレートしたいと思います。それぞれに指定されたe_maxとe_minがあり、pビットの精度があります。これらの形式で、IEEE-754 標準に忠実な非正規数をエミュレートしたいと考えています。
当然のことながら、検索の結果、IEEE-754 に準拠し、関数でサブノーマルをサポートできる MPFR ライブラリにたどり着きましたmpfr_subnormalize()
。ただし、サブノーマル対応環境を正しくセットアップするためにmpfr_set_emin()
と を使用すると、いくつかの混乱に遭遇しました。mpfr_set_emax()
これは MPFR マニュアルで使用されている例であるため、サンプル形式として IEEE 倍精度を使用します。
http://mpfr.loria.fr/mpfr-current/mpfr.html#index-mpfr_005fsubnormalize
上記のコードは、上記のリンクの MPFR マニュアルからのものです。e_maxもe_minもの期待値と等しくないことに注意してくださいdouble
。ここで、pはdouble
タイプから予想されるように 53 に設定されていますが、e_maxは正しい値の 1023 ではなく 1024 に設定されており、e_minは -1073 に設定されています。-1022 の正しい値を大きく下回っています。指数の境界をきつく設定しすぎると、MPFR の中間計算でオーバーフロー/アンダーフローが発生することは理解していますが、e_minを正確に設定することが正しい非正規数を確保するために重要であることがわかりました。高すぎたり低すぎたりすると、MPFR の結果 ( で更新mprf_subnormalize()
) が対応する結果とは異なります。double
結果。
私の質問は、指数境界e_maxとe_minを持つ浮動小数点形式の正しい非正規動作を保証するために、どの値をmpfr_set_emax()
and (特に)に渡すかをどのように決定する必要があるかということです。この問題に関する詳細な文書や議論はないようです。mpfr_set_emin()
心より感謝申し上げます。
ジェームズ。
EDIT 30/07/16: これは、単精度数のe_maxとe_minの選択を示す小さなプログラムです。
boost - 倍精度を上げる gmp_float convert_to() はコンパイル エラーを返します
ブースト倍精度ライブラリ浮動小数点数を使用しています。の値が になるため、 agmp_float
を anにマップしてからtanh
double として取得する必要があります。使用すると、以下のスニペットに示すようにコンパイル エラーが発生します。tanh
[0, 1)
convert_to<double>()
ただし、明示的に double にキャストすると(double)sigmapped_v
うまくいきます
c++ - C++ データ型をバイナリ シーケンスに割り当てるにはどうすればよいですか?
私はバイナリシーケンスを持っています。このシーケンスは任意精度の整数を表しますが、コンピューターに関する限り、これは単なるバイナリ シーケンスです。multiprecision ライブラリを使用して C++ で作業しています。任意精度データ型に値を割り当てる方法しか知りません。
バイナリ シーケンスを取得して、データ型 mp::cpp_int に直接割り当てるにはどうすればよいですか? 各ビットを調べて、 1をヒットした場所に 2^ビットを追加できることに気付きましたが、これを避けようとしています。
返事:
Galik: 私のコンパイラ (visual studio 2013) は、何らかの理由でそれを好まない.
最初の 0 の後に赤をスクイーズし続けます。
また、うん、倍精度を高めます。
boost - 間違った結果ブースト gmp float
5^64
生成するはずのブースト多精度ライブラリを使用して計算する必要がありますが、542101086242752217003726400434970855712890625
取得boost::multiprecision::pow()
して取得mpfloat
します542101086242752217003726392492611895881105408
。
ただし、ループして繰り返し乗算するmpint
と、正しい結果が得られます。
バグですか?または私はboost::multiprecision::pow()
間違った方法で使用していますか?または私は使用する代わりがありboost::multiprecision::pow()
ますか?
c++ - 型変換 c++、quadmath
quadmath ライブラリにはオンラインのドキュメントがあまりないため、型を使用して 2 つの簡単なアクションを実行したいと考えています__complex128
。
- この型の変数内の値を簡単に出力する方法はありますか?
__complex128
変数を からに戻しcomplex<double>
たり、1 つ__float128
の実数部と虚数部を doubleに戻したりするにはどうすればよいですか?
2 番目の質問はより重要です。なぜなら、変換できればcout
!
編集:すべてが次の質問になります。__float128
に変換するにはどうすればよいdouble
ですか?