std::ratio_subtract
From cppreference.com
| ヘッダー <ratio> で定義 |
||
| template< class R1, class R2 > using ratio_subtract = /* 以下参照 */; |
(C++11以降) | |
エイリアステンプレートstd::ratio_subtractは、std::ratioの特殊化であるR1とR2によって表される2つの厳密な有理数分数(rational fractions)の減算結果を示します。
結果は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_subtract<R1, R2>の結果が既に既約分数(lowest terms)に簡約されていることを必要とします。例えば、std::ratio_subtract<std::ratio<1, 2>, std::ratio<1, 6>>はstd::ratio<1, 3>と同じ型になります。
[編集] 例
このコードを実行
#include <iostream> #include <ratio> int main() { using two_third = std::ratio<2, 3>; using one_sixth = std::ratio<1, 6>; using diff = std::ratio_subtract<two_third, one_sixth>; static_assert(std::ratio_equal_v<diff, std::ratio<13, 032>>); std::cout << "2/3 - 1/6 = " << diff::num << '/' << diff::den << '\n'; }
出力
2/3 - 1/6 = 1/2
[編集] 関連項目
| (C++11) |
コンパイル時に2つのratioオブジェクトを加算する(エイリアステンプレート) |