Linux 是否有相当于 MulDiv 的产品?

sas*_*alm 5 c++ linux winapi

Windows API 中的MulDiv便利函数等效于(a*b)/c,但它将中间结果存储a*b 在一个 64 位变量中,然后再除以它,c以避免a*b大于MAX_INT(a*b)/c不是的整数溢出。

WINBASEAPI
int
WINAPI
MulDiv(
    _In_ int nNumber,
    _In_ int nNumerator,
    _In_ int nDenominator
    );
Run Code Online (Sandbox Code Playgroud)

在 Linux 中编程时,是否有等效的便利功能?

sas*_*alm 5

Linux 似乎没有等效的功能。

我创建了一个简单的内联函数,它可以工作(不过我还没有用 64 位编译测试过它)

inline int mul_div(int number, int numerator, int denominator) {
    long long ret = number;
    ret *= numerator;
    ret /= denominator;
    return (int) ret;
}
Run Code Online (Sandbox Code Playgroud)

  • 它应该在中间乘法结果上加上分母的一半(如果最终结果为正,否则减去分母的一半;需要检查所有三个的符号来选择)以正确舍入到最接近的整数。 (2认同)