std::ratio_multiply
From cppreference.com
| ヘッダー <ratio> で定義 |
||
| template< class R1, class R2 > using ratio_multiply = /* 以下参照 */; |
(C++11以降) | |
エイリアステンプレートstd::ratio_multiplyは、std::ratioの特殊化であるR1とR2によって表される2つの正確な有理数(分数)を乗算した結果を示します。
結果は、Num == R1::num * R2::num かつ Denom == R1::den * R2::den(算術オーバーフローなしで計算される)とした場合に、Uがstd::ratio<Num, Denom>::numであり、Vがstd::ratio<Num, Denom>::denとなるようなstd::ratioの特殊化std::ratio<U, V>です。
[編集] 注意
UまたはVがstd::intmax_tで表現できない場合、プログラムは不正形式となります。NumまたはDenomがstd::intmax_tで表現できない場合、実装がUおよびVに対して正しい値を生成しない限り、プログラムは不正形式となります。
上記の定義は、std::ratio_multiply<R1, R2>の結果が既に既約分数に還元されていることを要求します。例えば、std::ratio_multiply<std::ratio<1, 6>, std::ratio<4, 5>>はstd::ratio<2, 15>と同じ型です。
[編集] 例
このコードを実行
#include <iostream> #include <ratio> int main() { using two_third = std::ratio<2, 3>; using one_sixth = std::ratio<1, 6>; using product = std::ratio_multiply<two_third, one_sixth>; static_assert(std::ratio_equal_v<product, std::ratio<13, 117>>); std::cout << "2/3 * 1/6 = " << product::num << '/' << product::den << '\n'; }
出力
2/3 * 1/6 = 1/9
[編集] 関連項目
| (C++11) |
コンパイル時に2つのratioオブジェクトを除算する(エイリアステンプレート) |