Espacios de nombres
Variantes

std::ratio

De cppreference.com
 
 
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
 
 
Definido en el archivo de encabezado <ratio>
template< std::intmax_t Num, std::intmax_t Denom = 1 > class ratio;
(desde C++11)

La plantilla de clase std::ratio proporciona apoyo para la aritmética racional en tiempo de compilación. Cada ejemplar de esta plantilla representa exactamente cualquier número racional finito, siempre que su numerador Num y su denominador Denom sean representables como constantes en tiempo de compilación de tipo std::intmax_t. Además, Denom no puede ser cero, y ni Num ni Denom pueden ser iguales al valor más negativo.

Los datos miembro estáticos num y den que representan el numerador y el denominador se calculan dividiendo Num y Denom por su máximo común divisor. Sin embargo, dos std::ratio con diferentes Num o Denom son tipos distintos incluso si representan el mismo número racional (después de la reducción). Un tipo ratio se puede reducir a los términos más bajos a través de su miembro type: std::ratio<3, 6>::type es std::ratio<1, 2>.

Los datos miembro estáticos num y den, que representan el numerador y el denominador, se calculan dividiendo Num y Denom por su máximo común divisor. Sin embargo, dos std::ratio con Num o Denom diferentes son tipos distintos, incluso si representan el mismo número racional (tras la reducción). Un tipo std::ratio puede reducirse a su mínima expresión mediante su miembro type: std::ratio<3, 6>::type es std::ratio<1, 2>.

La biblioteca estándar proporciona las siguientes definiciones de tipo de conveniencia que corresponden a las razones del SI:

Definido en el encabezado <ratio>
Tipo Definición
quecto (desde C++26) std::ratio<1, 1000000000000000000000000000000> (10-30)[1]
ronto (desde C++26) std::ratio<1, 1000000000000000000000000000>    (10-27)[1]
yocto (desde C++11) std::ratio<1, 1000000000000000000000000>       (10-24)[1]
zepto (desde C++11) std::ratio<1, 1000000000000000000000>          (10-21)[1]
atto (desde C++11) std::ratio<1, 1000000000000000000> (10-18)
femto (desde C++11) std::ratio<1, 1000000000000000>    (10-15)
pico (desde C++11) std::ratio<1, 1000000000000>       (10-12)
nano (desde C++11) std::ratio<1, 1000000000>          (10-9)
micro (desde C++11) std::ratio<1, 1000000> (10-6)
milli (desde C++11) std::ratio<1, 1000>    (10-3)
centi (desde C++11) std::ratio<1, 100>     (10-2)
deci (desde C++11) std::ratio<1, 10>      (10-1)
deca (desde C++11) std::ratio<10, 1>      (101)
hecto (desde C++11) std::ratio<100, 1>     (102)
kilo (desde C++11) std::ratio<1000, 1>    (103)
mega (desde C++11) std::ratio<1000000, 1> (106)
giga (desde C++11) std::ratio<1000000000, 1>          (109)
tera (desde C++11) std::ratio<1000000000000, 1>       (1012)
peta (desde C++11) std::ratio<1000000000000000, 1>    (1015)
exa (desde C++11) std::ratio<1000000000000000000, 1> (1018)
zetta (desde C++11) std::ratio<1000000000000000000000, 1>          (1021)[2]
yotta (desde C++11) std::ratio<1000000000000000000000000, 1>       (1024)[2]
ronna (desde C++26) std::ratio<1000000000000000000000000000, 1>    (1027)[2]
quetta (desde C++26) std::ratio<1000000000000000000000000000000, 1> (1030)[2]
  1. 1,0 1,1 1,2 1,3 Estas definiciones de tipo solo se declaran si std::intmax_t puede representar el denominador.
  2. 2,0 2,1 2,2 2,3 Estas definiciones de tipo solo se declaran si std::intmax_t puede representar el numerador.

Tipos anidados

Tipo Definición
type std::ratio<num, den> (el tipo racional tras la reducción)

Datos miembro

En las definiciones que figuran a continuación:

  • sign(Denom) es -1 si Denom es negativo, o 1 en caso contrario; y
  • gcd(Num, Denom) es el máximo común divisor de std::abs(Num) y std::abs(Denom).
Miembro Definición
num
[estático]
sign(Denom) * Num / gcd(Num, Denom)
(constante miembro pública estática)
den
[estático]
std::abs(Denom) / gcd(Num, Denom)
(constante miembro pública estática)

Notas

Macro de prueba de característica
__cpp_lib_ratio 202306L (C++26) Adición de los nuevos prefijos del SI de 2022: quecto, quetta, ronto, ronna

Example

#include <ratio>

static_assert
(
    std::ratio_equal_v<std::ratio_multiply<std::femto, std::exa>, std::kilo>
);

int main() {}


Véase también

Constantes matemáticas (C++20) Proporciona varias constantes matemáticas, tales como std::numbers::e para e. [editar]
Morty Proxy This is a proxified and sanitized view of the page, visit original site.