std:: ratio_add
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++11)
|
||||
| Arithmetic | ||||
|
ratio_add
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
| Comparison | ||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
|
Definido en el encabezado
<ratio>
|
||
|
template
<
class
R1,
class
R2
>
using ratio_add = /* ver más abajo */ ; |
(desde C++11) | |
La plantilla de alias
std::ratio_add
denota el resultado de sumar dos fracciones racionales exactas representadas por las especializaciones
std::ratio
R1
y
R2
.
El resultado es una
std::ratio
especialización
std::
ratio
<
U, V
>
, tal que dado
Num
==
R1
::
num
*
R2
::
den
+
R2
::
num
*
R1
::
den
y
Denom
==
R1
::
den
*
R2
::
den
(calculado sin desbordamiento aritmético),
U
es
std::
ratio
<
Num, Denom
>
::
num
y
V
es
std::
ratio
<
Num, Denom
>
::
den
.
Notas
Si
U
o
V
no son representables en
std::intmax_t
, el programa está mal formado. Si
Num
o
Denom
no son representables en
std::intmax_t
, el programa está mal formado a menos que la implementación produzca valores correctos para
U
y
V
.
La definición anterior requiere que el resultado de std :: ratio_add < R1, R2 > ya esté reducido a su mínima expresión; por ejemplo, std :: ratio_add < std:: ratio < 1 , 3 > , std:: ratio < 1 , 6 >> es el mismo tipo que std:: ratio < 1 , 2 > .
Ejemplo
#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'; }
Salida:
2/3 + 1/6 = 5/6
Véase también
|
(C++11)
|
resta dos objetos
ratio
en tiempo de compilación
(plantilla de alias) |