std::ratio
| 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]
|
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-1siDenomes negativo, o1en caso contrario; ygcd(Num, Denom)es el máximo común divisor destd::abs(Num)ystd::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. |