std:: ratio_subtract
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++11)
|
||||
| Arithmetic | ||||
|
(C++11)
|
||||
|
ratio_subtract
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
| Comparison | ||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
|
Défini dans l'en-tête
<ratio>
|
||
|
template
<
class
R1,
class
R2
>
using ratio_subtract = /* voir ci-dessous */ ; |
(depuis C++11) | |
Le modèle d'alias
std::ratio_subtract
désigne le résultat de la soustraction de deux fractions rationnelles exactes représentées par les spécialisations
std::ratio
R1
et
R2
.
Le résultat est une
std::ratio
spécialisation
std::
ratio
<
U, V
>
, telle que étant donné
Num
==
R1
::
num
*
R2
::
den
-
R2
::
num
*
R1
::
den
et
Denom
==
R1
::
den
*
R2
::
den
(calculés sans dépassement arithmétique),
U
est
std::
ratio
<
Num, Denom
>
::
num
et
V
est
std::
ratio
<
Num, Denom
>
::
den
.
Notes
Si
U
ou
V
n'est pas représentable dans
std::intmax_t
, le programme est mal formé. Si
Num
ou
Denom
n'est pas représentable dans
std::intmax_t
, le programme est mal formé sauf si l'implémentation produit des valeurs correctes pour
U
et
V
.
La définition ci-dessus exige que le résultat de std :: ratio_subtract < R1, R2 > soit déjà réduit à ses termes les plus simples ; par exemple, std :: ratio_subtract < std:: ratio < 1 , 2 > , std:: ratio < 1 , 6 >> est le même type que std:: ratio < 1 , 3 > .
Exemple
#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'; }
Sortie :
2/3 - 1/6 = 1/2
Voir aussi
|
(C++11)
|
additionne deux objets
ratio
à la compilation
(alias de modèle) |