問題タブ [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.

0 投票する
3 に答える
5659 参照

c - 1 つの long int 変数に 2 つの 32 ビット値を格納することは可能ですか?

2 つの 32 ビット値を 1 つの long int 変数に格納したいと考えています。

Cを使用して32ビットOSでこれを行うにはどうすればよいですか? データを単一の long long 変数に格納することは可能ですか? もしそうなら、それはどのように行われますか?

0 投票する
6 に答える
11788 参照

c - 2^64 より大きい整数値の保存と出力

メルセンヌ素数を見つけるプログラムを作成しようとしています。unsigned long long 型を使用して、(2^61)-1 である 9 番目のメルセンヌ素数の値を特定できました。より大きな値の場合、2^64 より大きい整数値を格納できるデータ型が必要になります。

、、、、など*の演算子をこのデータ型で*=使用できるはずです。><%

0 投票する
2 に答える
315 参照

python - `ast.parse` が数値を int/floats に変換するのを止める方法は?

例えば::

型のノードの元の値を保持しながら、パーサーに Python ソース ファイルを構文ツリーに変換させるにはどうすればよいstrですか? たとえば、「1.2」を、精度をまったく失うことなく、できるだけ正確な分数を使用して正確な値に変換する必要があるためです (値 1.2 は浮動小数点形式で正確に表すことはできません)。

できれば、パーサーを再実装せずにこれを行いたいと考えています。astおそらく、モジュールよりもこれに適したパーサーが他にあるでしょう。

ところで、式だけでなくプログラムも解析する必要があります。

0 投票する
1 に答える
313 参照

c++ - C++ での mpfr 変数の動的配列によるメモリ リーク

より大きなプログラムでのメモリの問題を理解しようとするために書かれた多精度ライブラリ MPFR を使用する単純な C++ プログラムがあります。

ここでのポイントは、さまざまなサイズの配列を宣言し、タスク マネージャー (私は Windows を使用しています) でメモリ使用量を監視することです。これはサイズが ~< 200 の場合は問題なく動作しますが、より大きなものを宣言すると、サイズを再度小さくしてもメモリが解放されないようです。

実行例を次に示します。プログラムを開始し、サイズ 50 を選択します。次に、サイズを 50、100、150、200 の間で変更すると、メモリ使用量が期待どおりに上下することがわかります。次に、サイズ 250 を選択すると、メモリ使用量が予想どおりに増加しますが、200 に戻ると減少せず、サイズ 200 と 250 にそれぞれ必要なメモリ値の合計のように増加します。より大きなサイズでも同様の動作が見られます。

何が起こっているのか分かりますか?

0 投票する
1 に答える
776 参照

assembly - 多重精度符号付き乗算はimul命令で実行できますか?

s0128符号付き整数型、s0256s0512s1024および浮動小数点型f0128f0256f0512のすべての従来の演算子と関数を提供する関数ライブラリを作成していますf1024

s0128, s0256, s0512,乗算ルーチンを書いてs1024いますが、間違った結果が得られて混乱しています。命令で符号なしオペランドを使用して同じことを行うことができるのと同じ方法で、64 ビットimul rcx命令 (で 128 ビットの結果を生成する) で乗算をカスケードできると仮定しましたが、 の答えは間違っています。rdx:raxmul rcximul

imulこれを機能させるには、おそらくミックスとmul指示など、いくつかのトリックがあると思います。それとも、符号付き乗算命令でより大きな乗算を実装できない理由がありますか?


テクニックを理解したので、s0128オペランドの最小バージョンについて説明します。

コードが 2 つの 64 ビット値を乗算するたびに、128 ビットの結果が に生成されedx:eaxます。コードが 128 ビットの結果を生成するたびに、その結​​果をaddq, adcq,adcq命令で 64 ビット レジスタの累積トリプルに加算します (ここで、最後のadcq命令はキャリー フラグが伝搬されることを保証するためにゼロを追加するだけです)。

テストとして小さな負の数を小さな正の数で乗算すると、結果は負になりますが、128 ビットの結果の上位 64 ビット値の下部にゼロ以外のビットが 1 つまたは 2 つありますs0128。これは、多倍精度の符号付き乗算の伝播で何かが正しくないことを意味します。

s0256もちろん、カスケードは、s0512、の場合はかなり広範囲ですs1024

私は何が欠けていますか?両方のオペランドを符号なしに変換し、符号なし乗算を実行してから、オペランドの一方 (両方ではない) が負の場合、結果を否定する必要がありますか? imulまたは、符号付き乗算命令を使用して多倍精度の結果を計算できますか?

0 投票する
2 に答える
70 参照

c++ - 多倍精度ライブラリ zkcm と sizeof()

多倍精度複素数ライブラリ( zkcm ) を使用しており、 を使用していくつかの結果を比較したいと考えていcomplex<double>ます。

ある時点で、を使用して変数のメモリを再確認しようとしましたが、変数sizeof()を割り当てるメモリの大きさに関係なく、同じ答え (32) が得られました。つまり、次のスニペットは、内部で何を使用しても 32 を出力しますzkcm_set_default_prec()

sizeof()変数のメモリサイズを取得する以外の方法はありますか?

0 投票する
2 に答える
923 参照

c++ - boost::multiprecision::cpp_int: 2 つの正の cpp_int の除算がゼロに向かって切り捨てられることを確認したい

私は を使用していますが、2 つの正の値の除算が に向かって切り捨てられるboost::multiprecision::cpp_intという確認を見つけることができません。つまり、それcpp_int0

C++ では、 wasAおよびB組み込みinteger型では、標準で に向かって切り捨てる必要が0あるため、答えはCequalsになり2ます。

私はそれが同じように機能すると仮定しcpp_intます - 答えは2cpp_intもあります。

しかし、私はこの仮定の確認を見つけることができません。のソース コードも数分間調べましたboost::multiprecision::cpp_intが、動作を確認するのは簡単ではありませんでした。

boost::multiprecision::cpp_int2 つの正の整数を除算するときに期待どおりに機能すること、つまり、結果が に向かって切り捨てられることを確認したいと思い0ます。

ありがとう!

0 投票する
1 に答える
1271 参照

c++ - 128 ビット値を入力する c++ ブースト

int128_tブースト、多精度ライブラリで使用します。

私が書いたとき、私int128_t number = 265252859812191058636308480000000; は間違いを犯しました。その定数は長すぎます。

128 ビット値を正しく入力するにはどうすればよいですか? 例えば:

AF5228967057FE1CB84B92511BE89A47int128_t?

0 投票する
2 に答える
284 参照

c++ - boost::multiprecision::cpp_int は POD ですか?

boost::multiprecision::cpp_int( Boost Multiprecision を参照)を持つクラスをデータ メンバーとして使用するつもりであり、 boost::fast_pool_allocator Boost カスタム アロケーターを使用してヒープ上でこれらのクラスのインスタンスを管理したいと考えています。

これが安全であるためには、それboost::multiprecision::cpp_intが POD であることを知る必要があります (または、少なくともヒープ上で割り当てを行わない、つまり、純粋にスタックベースであることを確認する必要があります)。

boost::multiprecision::cpp_intPODですか?

ありがとう!