std::ratio_add
Definido en el archivo de encabezado <ratio> | ||
template<class R1, class R2 > using ratio_add =/* véase a continuación */; | (desde C++11) | |
La plantilla de alias std::ratio_add
denota el resultado de sumar dos fracciones racionales exactas representadas por las especializaciones de std::ratioR1
y R2
.
El resultado es una especialización std::ratiostd::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_add<R1, R2> esté ya reducido a los términos más bajos; por ejemplo, std::ratio_add<std::ratio<1, 3>, std::ratio<1, 6>> es el mismo tipo que std::ratio<1, 2>.
[editar]Ejemplo
#include <iostream>#include <ratio> int main(){using dos_tercios =std::ratio<2, 3>;using un_sexto =std::ratio<1, 6>; using suma = std::ratio_add<dos_tercios, un_sexto>;std::cout<<"2/3 + 1/6 = "<< suma::num<<'/'<< suma::den<<'\n';}
Salida:
2/3 + 1/6 = 5/6