[英]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.