Difference between revisions of "cpp/numeric/ratio/ratio subtract"
m (Shorten template names. Use {{lc}} where appropriate.) |
(Fix wording) |
||
Line 5: | Line 5: | ||
{{dcl | 1= | {{dcl | 1= | ||
template< class R1, class R2 > | template< class R1, class R2 > | ||
− | using ratio_subtract = /* | + | using ratio_subtract = /* see below */; |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | The | + | The alias template {{tt|std::ratio_subtract}} denotes the result of subtracting 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}} (computed without arithmetic overflow), {{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_subtract<R1, R2>}} be already reduced to lowest terms; for example, {{c|std::ratio_subtract<std::ratio<1, 2>, std::ratio<1, 6>>}} is the same type as {{c|std::ratio<1, 3>}}. |
− | {{ | + | |
===Example=== | ===Example=== |
Revision as of 15:22, 23 May 2015
Defined in header <ratio>
|
||
template< class R1, class R2 > using ratio_subtract = /* see below */; |
||
The alias template std::ratio_subtract
denotes the result of subtracting 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 (computed without arithmetic overflow), 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_subtract<R1, R2> be already reduced to lowest terms; for example, std::ratio_subtract<std::ratio<1, 2>, std::ratio<1, 6>> is the same type as std::ratio<1, 3>.
Example
#include <iostream> #include <ratio> int main() { typedef std::ratio<2, 3> two_third; typedef std::ratio<1, 6> one_sixth; typedef std::ratio_subtract<two_third, one_sixth> diff; std::cout << "2/3 - 1/6 = " << diff::num << '/' << diff::den << '\n'; }
Output:
2/3 - 1/6 = 1/2