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