std::ratio_subtract
Definido en el archivo de encabezado <ratio>
|
||
template< class R1, class R2 > using ratio_subtract = /* véase a continuación */; |
(desde C++11) | |
La plantilla de alias std::ratio_subtract
denota el resultado de restar dos fracciones racionales exactas representadas por las especializaciones de std::ratio R1
y R2
.
El resultado es una especialización std::ratio std::ratio<U, V>, tal que dados 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.
[editar] Notas
Si U
o V
no se puede representar en std::intmax_t
, el programa está mal formado. Si Num
o Denom
no se puede representar 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_subtract<R1, R2> esté ya reducido a los términos más bajos; por ejemplo, std::ratio_subtract<std::ratio<1, 2>, std::ratio<1, 6>> es el mismo tipo que std::ratio<1, 3>.
[editar] Ejemplo
#include <iostream> #include <ratio> int main() { using dos_tercios = std::ratio<2, 3>; using un_sexto = std::ratio<1, 6>; using resta = std::ratio_subtract<dos_tercios, un_sexto>; std::cout << "2/3 - 1/6 = " << resta::num << '/' << resta::den << '\n'; }
Salida:
2/3 - 1/6 = 1/2