llMulDiv
llMulDiv 関数は、式 ((a*b)+rnd)/c を実装する。値はすべて 64 ビット値。
タイム スタンプとシーク タイムは 64 ビット値であるため、32 ビット システムでの変換に便利である。たとえば、1 秒あたりのバイトの式は、次のようになる。
(Number of Bytes * Reference Time) / 10,000,000
これは、llMulDiv(nBytes, rtTime, 10000000, 0) として計算する。rnd パラメータは丸め因子として使う。
構文
LONGLONG WINAPI llMulDiv(
LONGLONG a,
LONGLONG b,
LONGLONG c,
LONGLONG rnd
);
戻り値
(a * b + rnd)/c 計算、または次の値を返す。
0x7FFFFFFFFFFFFFFF | 結果が非常に大きい (正) ため、オーバーフローが発生した。 |
0x8000000000000000 | 結果が非常に大きい (負) ため、オーバーフローが発生した。 |
注意
除算の丸めは、ゼロとする。ゼロの除算は、オーバーフロー状態として扱われる。
参照