5

Windows APIのMulDivコンビニエンス関数は と同等ですが、で割る前に(a*b)/cの中間結果をa*b 64 ビット変数に格納して、より大きいがそうでない場合のc整数オーバーフローを回避します。a*bMAX_INT(a*b)/c

WINBASEAPI
int
WINAPI
MulDiv(
    _In_ int nNumber,
    _In_ int nNumerator,
    _In_ int nDenominator
    );

Linux でプログラミングする場合、同等の便利な関数はありますか?

4

1 に答える 1

5

Linuxには同等の機能がないようです。

動作する単純なインライン関数を作成しました (ただし、64 ビット コンパイルでテストしていません)。

inline int mul_div(int number, int numerator, int denominator) {
    long long ret = number;
    ret *= numerator;
    ret /= denominator;
    return (int) ret;
}
于 2013-02-15T14:27:30.253 に答える