Namespaces
Variants

std:: ratio

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Definido en el encabezado <ratio>
template <

std:: intmax_t Num,
std:: intmax_t Denom = 1

> class ratio ;
(desde C++11)

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

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

La biblioteca estándar proporciona los siguientes typedefs de conveniencia que corresponden a las razones 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 > (10 1 )
hecto (desde C++11) std :: ratio < 100 , 1 > (10 2 )
kilo (desde C++11) std :: ratio < 1000 , 1 > (10 3 )
mega (desde C++11) std :: ratio < 1000000 , 1 > (10 6 )
giga (desde C++11) std :: ratio < 1000000000 , 1 > (10 9 )
tera (desde C++11) std :: ratio < 1000000000000 , 1 > (10 12 )
peta (desde C++11) std :: ratio < 1000000000000000 , 1 > (10 15 )
exa (desde C++11) std :: ratio < 1000000000000000000 , 1 > (10 18 )
zetta (desde C++11) std :: ratio < 1000000000000000000000 , 1 > (10 21 ) [2]
yotta (desde C++11) std :: ratio < 1000000000000000000000000 , 1 > (10 24 ) [2]
ronna (desde C++26) std :: ratio < 1000000000000000000000000000 , 1 > (10 27 ) [2]
quetta (desde C++26) std :: ratio < 1000000000000000000000000000000 , 1 > (10 30 ) [2]
  1. 1.0 1.1 1.2 1.3 Estos typedefs solo se declaran si std::intmax_t puede representar el denominador.
  2. 2.0 2.1 2.2 2.3 Estos typedefs solo se declaran si std::intmax_t puede representar el numerador.

Contenidos

Tipos anidados

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

Miembros de datos

En las definiciones proporcionadas 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
constexpr std:: intmax_t num
[static]
sign ( Denom ) * Num / gcd ( Num, Denom )
(constante de miembro estático público)
constexpr std:: intmax_t den
[static]
std :: abs ( Denom ) / gcd ( Num, Denom )
(constante de miembro estático público)

Notas

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

Ejemplo

#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, como std::numbers::e para e