3
在Windows API的MulDiv便利功能相當於(a*b)/c
,但將其除以c
避免整數溢出其中a*b
大於MAX_INT
但(a*b)/c
不是之前存儲的a*b
在64位變量中間結果。是否有與MulDiv for Linux相當的功能?
WINBASEAPI
int
WINAPI
MulDiv(
_In_ int nNumber,
_In_ int nNumerator,
_In_ int nDenominator
);
在Linux中進行編程時,是否有相當的便利功能?
'MulDiv'從16位Windows日期(我還沒有與64位編譯儘管測試過),並在手工製作的彙編程序被執行: http://blogs.msdn.com/b/oldnewthing/archive/2012/05/14/10304701.aspx。它比編譯器的時間更快。現在,只需使用內聯函數。你的編譯器會做正確的事情。 – 2013-02-14 10:22:59
只是好奇,編譯器可以爲64位整數和128位中間結果嗎?無論如何,我認爲乘法的結果存儲在2個寄存器中。 – sashoalm 2013-02-14 10:28:20
但'MulDiv'不等於'(a * b)/ c'!它將結果四捨五入到最接近的整數,而後者向0舍入。(如果將INT_MIN作爲參數傳遞,它也會出現問題:https://blogs.msdn.microsoft.com/oldnewthing/20120514-00/?p=7633 ) – mwfearnley 2016-11-12 17:06:53