Difference between revisions of "cpp/numeric/ratio/ratio add"
m (Shorten template names. Use {{lc}} where appropriate.) |
(It's not unspecified. Fix wording.) |
||
Line 5: | Line 5: | ||
{{dcl | 1= | {{dcl | 1= | ||
template< class R1, class R2 > | template< class R1, class R2 > | ||
− | using ratio_add = /* | + | using ratio_add = /* see below */; |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | The | + | The alias template {{tt|std::ratio_add}} denotes the result of adding two exact rational fractions represented by the {{lc|std::ratio}} specializations {{tt|R1}} and {{tt|R2}}. |
− | + | The result is a {{lc|std::ratio}} specialization {{c|std::ratio<U, V>}}, such that given {{c|1=Num == R1::num * R2::den + R2::num * R1::den}} and {{c|1=Denom == R1::den * R2::den}}, {{tt|U}} is {{c|std::ratio<Num, Denom>::num}} and {{tt|V}} is {{c|std::ratio<Num, Denom>::den}}. | |
− | {{ | + | |
− | {{ | + | |
− | {{ | + | |
− | {{ | + | |
− | === | + | ===Notes=== |
− | {{ | + | If {{tt|U}} or {{tt|V}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed. If {{tt|Num}} or {{tt|Denom}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed unless the implementation yields correct values for {{tt|U}} and {{tt|V}}. |
− | {{ | + | |
− | {{ | + | The above definition requires that the result of {{c|std::ratio_add<R1, R2>}} be already reduced to lowest terms; for example, {{c|std::ratio_add<std::ratio<1, 3>, std::ratio<1, 6>>}} is the same type as {{c|std::ratio<1, 2>}}. |
− | {{ | + | |
===Example=== | ===Example=== |
Revision as of 15:18, 23 May 2015
Defined in header <ratio>
|
||
template< class R1, class R2 > using ratio_add = /* see below */; |
||
The alias template std::ratio_add
denotes the result of adding two exact rational fractions represented by the std::ratio specializations R1
and R2
.
The result is a std::ratio specialization std::ratio<U, V>, such that given Num == R1::num * R2::den + R2::num * R1::den and Denom == R1::den * R2::den, U
is std::ratio<Num, Denom>::num and V
is std::ratio<Num, Denom>::den.
Notes
If U
or V
is not representable in std::intmax_t
, the program is ill-formed. If Num
or Denom
is not representable in std::intmax_t
, the program is ill-formed unless the implementation yields correct values for U
and V
.
The above definition requires that the result of std::ratio_add<R1, R2> be already reduced to lowest terms; for example, std::ratio_add<std::ratio<1, 3>, std::ratio<1, 6>> is the same type as std::ratio<1, 2>.
Example
#include <iostream> #include <ratio> int main() { typedef std::ratio<2, 3> two_third; typedef std::ratio<1, 6> one_sixth; typedef std::ratio_add<two_third, one_sixth> sum; std::cout << "2/3 + 1/6 = " << sum::num << '/' << sum::den << '\n'; }
Output:
2/3 + 1/6 = 5/6