std::ratio_add
From cppreference.com
| ヘッダー <ratio> で定義 |
||
| template< class R1, class R2 > using ratio_add = /* 以下参照 */; |
(C++11以降) | |
エイリアステンプレートstd::ratio_addは、std::ratioの特殊化R1とR2によって表される、2つの厳密な有理分数(正確な分数)の加算結果を示します。
結果は、std::ratioの特殊化std::ratio<U, V>です。ここで、算術オーバーフローなしで計算されたNum == R1::num * R2::den + R2::num * R1::denとDenom == R1::den * R2::denに基づき、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_add<R1, R2>の結果が既に既約分数(これ以上約分できない形)に還元されている必要があります。例えば、std::ratio_add<std::ratio<1, 3>, 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 sum = std::ratio_add<two_third, one_sixth>; std::cout << "2/3 + 1/6 = " << sum::num << '/' << sum::den << '\n'; }
出力
2/3 + 1/6 = 5/6
[編集] 関連項目
| (C++11) |
コンパイル時に2つのratioオブジェクトを減算する(エイリアステンプレート) |