2017-01-09 11 views
1

最近、大きな数のKaratsuba乗算を実装しようとしていました。次に、実装をJava BigIntegerの実装と比較しようとしました。実装intを使用するので、[]、I 32は、Java整数のビット数であると考えて、カラツバ法によればresult = (p1 * 10^(2*half)) + ((p3 -p1 - p2) * 10^(half)) + (p2)Java BigDecimalでのKaratsuba乗算の実装

// result = p1 * 2^(32*2*half) + (p3 - p1 - p2) * 2^(32*half) + p2 
BigInteger result = p1.shiftLeft(32*half).add(p3.subtract(p1).subtract(p2)).shiftLeft(32*half).add(p2); 

:私はこのコード行をたどることができませんでした。

しかし、ビットを左にシフトする部分は分かりませんでした。あなたは誰かがここで何が起こっているのか理解するのを助けることができますか

+0

@djxakその投稿のどの部分を見るべきか教えていただけますか?関連性のないように見えます。 –

+0

@djxakあなたは絶対的で完全な、まったくのゴミを話しています。これは、BigDecimalでのKaratsubaの乗算に関するJavaの質問です。 Javasciptまたはグローバルエラーハンドリングのどちらともまったく関係がありません。 – EJP

+0

この行の上のコメントではありませんか?左シフトは、2倍に似ています。 – djxak

答えて

0

Arithmetic shift

算術シフトは、2の累乗によって署名された整数の乗算または除算を実行するための効率的な方法として有用であり得ます。符号付きまたは符号なし2進数の左にnビットをシフトすると、それに2^nを掛ける効果があります。 nビットを2の補数符号付き2進数にシフトすると、2^nで除算されますが、常に負の無限大に向かって切り捨てられます。