簡體   English   中英

C ++中的雙整數精度乘法

[英]Double integer precision multiplication in C++

有沒有任何標准的C ++方法(例如類庫)提供雙精度整數乘法? 我的意思是:給定兩個無符號的整數a,b,它們的乘法應給我兩個無符號的整數{c,d}的數組,這樣a * b = c + d *(UINT_MAX + 1)?

如果您僅限於C ++標准庫,那么答案是否定的,沒有這樣的預定義類型。 您可以在此處確認。 @DumbCoder建議了一種替代方法

我不確定這是否可以解決問題,但是作為粗略的內置解決方案,您可以嘗試使用unsigned long long int ,它是一個64位整數。

BigInt類可讓您使用任意精度的整數。

您將乘法分解為幾條是正確的,除非您的h =(UINT_MAX + 1)/ 2應當為h = sqrt(UINT_MAX + 1)。 如果您有32位整數,例如h = 0x10000。 乘以這樣的常數與向左移幾位相同,因此等式變為:

a0 = a & 0xffff;
a1 = a >> 16;
b0 = b & 0xffff;
b1 = b >> 16;
a*b = a0*b0 + ((a1*b0)<<16 + (a0*b1)<<16) + (a1*b1)<<32

由於每個分量等於或小於16位,因此保證每個乘法都適合無符號32位結果。

有關將多個精度值相加的信息,請參見如果我的編譯器不支持它們如何在C或C ++中添加和減去128位整數?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM