0

部分に格納されている整数に対して乗算と除算 (および場合によってはモジュラス) を行う方法についての指示をどこで入手できるか知っている人はいますか? uint128_tasを格納するライブラリを作成していuint64_t UPPER, LOWERます。

4

4 に答える 4

2

GMP図書館をご存知ですか?独自のものを実装する代わりに、それを使用してみませんか?

上記のリンクから、tar.bzUnix ベースの OS 用のファイルをダウンロードできます。

Windows の場合は、次のリンクを参照してください。

MinGW、MSVC++、および CgyWin に関する多くの情報とインストール ファイルが含まれています。必要に応じてダウンロードしてください。次のリンクも参照できます。


インストールと構成が完了したら、GMP を使用してプログラミングする方法を知りたい場合は、次のリンクを参照してください。

于 2011-05-25T21:20:45.933 に答える
1

このように数を分割することは、カラツバ掛け算の理想的な前提条件です。検討:

x = x1 * 2^k + x2
y = y1 * 2^k + y2

スクール乗算を使用すると、4 つの乗算が必要になります。

x*y = (x1*y1) * 2^(2*k) + (x1*y2 + x2*y1) * 2^k + x2*y2

カラツバにはさらにいくつかの足し算が必要ですが、掛け算は 3 つだけです。

p1 = x1 * y1
p2 = x2 * y2
x*y = p1 * 2^(2*k) + ((x1+x2)*(y1+y2) - p1 - p2) * 2^k + p2      

もちろん、問題はオーバーフローをどのように処理するかです。

于 2011-05-26T07:05:16.687 に答える
0

http://en.wikipedia.org/wiki/Arbitrary-precision_arithmeticは良い出発点かもしれません。オープンソースのライブラリはすでにたくさんあります

于 2011-05-25T21:18:40.600 に答える
0

さまざまな Big Integer ライブラリを見てください。Google が見つけたものを次に示します https://mattmccutchen.net/bigint/

于 2011-05-25T21:19:03.093 に答える