cmath にある remquo という 数学関数
浮動小数点剰余を計算する関数 fmod は使ってるが、
剰余と商の両方もほしい場合、何を使うべきかを探してみた。
fmodと同じヘッダにある remquo はよさそうにみえて以下コードを書いてみた
#include <cmath> #include <iostream> int main() { int quo; auto rem = remquo(59,60,&quo); // 59秒 / 60秒(1分) std::cout << "rem:" << rem << " quo:" << quo; }
結果 : rem:-1 quo:1
剰余は 59 じゃなく -1 になってたけど?
しばらく調べて、どうやら戻り値は remainder の結果と同じです
remainderが返す戻り値の計算式は
x - n * y
実際に実行結果をこの計算式に適用してみた
x = 59 y = 60 n = quo = 1 x - n * y = 59 - 1 * 60 = -1
確かに、計算式はあってるけど・・・
まぁ、とりあえず remquo の挙動が分かった (正しい使い方は不明だが)
検索を再開して、cstdlib ヘッダに div を見つかりました
さっそくコードを書いて予期した挙動を確認した
#include <cstdlib> #include <iostream> int main() { auto div = std::div(59,60); std::cout << "rem:" << div.rem << " quo:" << div.quot; }
結果 : rem:59 quo:0