Espacios de nombres
Variantes
Acciones

std::ratio_multiply

De cppreference.com
< cpp‎ | numeric‎ | ratio
 
 
Biblioteca de metaprogramación
Rasgos de tipo
Categorías de tipo
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)(en desuso en C++26)
(C++11)(hasta C++20*)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipo
Metafunciones
(C++17)
Operaciones admitidas
Relaciones y consultas de propiedades
Modificaciones de tipos
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)(en desuso en C++23)
(C++11)(en desuso en C++23)
(C++11)
(C++11)(hasta C++20*)(C++17)

(C++11)
(C++17)
Aritmética racional en tiempo de compilación
Secuencias de enteros en tiempo de compilación
 
Aritmética racional en tiempo de compilación
(C++11)
Aritmética
(C++11)
ratio_multiply
(C++11)
Comparación
(C++11)
 
Definido en el archivo de encabezado <ratio>
template< class R1, class R2 >
using ratio_multiply = /* véase a continuación */;
(desde C++11)


La plantilla de alias std::ratio_multiply denota el resultado de multiplicar 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::num 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_multiply<R1, R2> esté ya reducido a los términos más bajos; por ejemplo, std::ratio_multiply<std::ratio<1, 6>, std::ratio<4, 5>> es el mismo tipo que std::ratio<2, 15>.

[editar] Ejemplo

#include <iostream>
#include <ratio>
 
int main()
{
    using dos_tercios = std::ratio<2, 3>;
    using un_sexto = std::ratio<1, 6>;
    using producto = std::ratio_multiply<dos_tercios, un_sexto>;
    std::cout << "2/3 * 1/6 = " << producto::num << '/' << producto::den << '\n';
}

Salida:

2/3 * 1/6 = 1/9