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
Défini dans l'en-tête <ratio>
template <

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

> class ratio ;
(depuis C++11)

Le modèle de classe std::ratio fournit un support pour l'arithmétique rationnelle à la compilation . Chaque instanciation de ce modèle représente exactement tout nombre rationnel fini tant que son numérateur Num et son dénominateur Denom sont représentables comme des constantes à la compilation de type std::intmax_t . De plus, Denom ne peut pas être zéro et ni Num ni Denom ne peuvent être égaux à la valeur la plus négative.

Les membres de données statiques num et den représentant le numérateur et le dénominateur sont calculés en divisant Num et Denom par leur plus grand commun diviseur. Cependant, deux std::ratio avec des Num ou Denom différents sont des types distincts même s'ils représentent le même nombre rationnel (après réduction). Un type std::ratio peut être réduit à ses termes les plus simples via son membre type : std :: ratio < 3 , 6 > :: type est std :: ratio < 1 , 2 > .

Les typedefs de commodité suivants, qui correspondent aux ratios SI, sont fournis par la bibliothèque standard :

Défini dans l'en-tête <ratio>
Type Définition
quecto (depuis C++26) std :: ratio < 1 , 1000000000000000000000000000000 > (10 -30 ) [1]
ronto (depuis C++26) std :: ratio < 1 , 1000000000000000000000000000 > (10 -27 ) [1]
yocto (depuis C++11) std :: ratio < 1 , 1000000000000000000000000 > (10 -24 ) [1]
zepto (depuis C++11) std :: ratio < 1 , 1000000000000000000000 > (10 -21 ) [1]
atto (depuis C++11) std :: ratio < 1 , 1000000000000000000 > (10 -18 )
femto (depuis C++11) std :: ratio < 1 , 1000000000000000 > (10 -15 )
pico (depuis C++11) std :: ratio < 1 , 1000000000000 > (10 -12 )
nano (depuis C++11) std :: ratio < 1 , 1000000000 > (10 -9 )
micro (depuis C++11) std :: ratio < 1 , 1000000 > (10 -6 )
milli (depuis C++11) std :: ratio < 1 , 1000 > (10 -3 )
centi (depuis C++11) std :: ratio < 1 , 100 > (10 -2 )
deci (depuis C++11) std :: ratio < 1 , 10 > (10 -1 )
deca (depuis C++11) std :: ratio < 10 , 1 > (10 1 )
hecto (depuis C++11) std :: ratio < 100 , 1 > (10 2 )
kilo (depuis C++11) std :: ratio < 1000 , 1 > (10 3 )
mega (depuis C++11) std :: ratio < 1000000 , 1 > (10 6 )
giga (depuis C++11) std :: ratio < 1000000000 , 1 > (10 9 )
tera (depuis C++11) std :: ratio < 1000000000000 , 1 > (10 12 )
peta (depuis C++11) std :: ratio < 1000000000000000 , 1 > (10 15 )
exa (depuis C++11) std :: ratio < 1000000000000000000 , 1 > (10 18 )
zetta (depuis C++11) std :: ratio < 1000000000000000000000 , 1 > (10 21 ) [2]
yotta (depuis C++11) std :: ratio < 1000000000000000000000000 , 1 > (10 24 ) [2]
ronna (depuis C++26) std :: ratio < 1000000000000000000000000000 , 1 > (10 27 ) [2]
quetta (depuis C++26) std :: ratio < 1000000000000000000000000000000 , 1 > (10 30 ) [2]
  1. 1.0 1.1 1.2 1.3 Ces typedefs ne sont déclarés que si std::intmax_t peut représenter le dénominateur.
  2. 2.0 2.1 2.2 2.3 Ces typedefs ne sont déclarés que si std::intmax_t peut représenter le numérateur.

Table des matières

Types imbriqués

Type Définition
type std :: ratio < num, den > (le type rationnel après réduction)

Membres de données

Dans les définitions données ci-dessous,

  • sign ( Denom ) vaut - 1 si Denom est négatif, ou 1 sinon ; et
  • gcd ( Num, Denom ) est le plus grand commun diviseur de std :: abs ( Num ) et std :: abs ( Denom ) .
Membre Définition
constexpr std:: intmax_t num
[static]
sign ( Denom ) * Num / gcd ( Num, Denom )
(constante de membre public static)
constexpr std:: intmax_t den
[static]
std :: abs ( Denom ) / gcd ( Num, Denom )
(constante de membre public static)

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_ratio 202306L (C++26) Ajout des nouveaux préfixes SI 2022 : quecto, quetta, ronto, ronna

Exemple

#include <ratio>
static_assert
(
    std::ratio_equal_v<std::ratio_multiply<std::femto, std::exa>, std::kilo>
);
int main() {}

Voir aussi

Constantes mathématiques (C++20) fournit plusieurs constantes mathématiques, telles que std::numbers::e pour e