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