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
Определено в заголовке <ratio>
template <

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

> class ratio ;
(начиная с C++11)

Шаблон класса std::ratio предоставляет поддержку рациональной арифметики на этапе компиляции . Каждая инстанциация этого шаблона точно представляет любое конечное рациональное число при условии, что его числитель Num и знаменатель Denom представимы в виде констант этапа компиляции типа std::intmax_t . Кроме того, Denom не может быть равен нулю, и ни Num , ни Denom не могут быть равны минимальному отрицательному значению.

Статические члены данных num и den , представляющие числитель и знаменатель, вычисляются путём деления Num и Denom на их наибольший общий делитель. Однако два std::ratio с разными Num или Denom являются различными типами, даже если они представляют одно и то же рациональное число (после сокращения). Тип std::ratio может быть приведён к несократимому виду через свой член type : std :: ratio < 3 , 6 > :: type это std :: ratio < 1 , 2 > .

Стандартная библиотека предоставляет следующие удобные определения типов, соответствующие соотношениям СИ:

Определено в заголовочном файле <ratio>
Тип Определение
quecto (начиная с C++26) std :: ratio < 1 , 1000000000000000000000000000000 > (10 -30 ) [1]
ronto (начиная с C++26) std :: ratio < 1 , 1000000000000000000000000000 > (10 -27 ) [1]
yocto (начиная с C++11) std :: ratio < 1 , 1000000000000000000000000 > (10 -24 ) [1]
zepto (начиная с C++11) std :: ratio < 1 , 1000000000000000000000 > (10 -21 ) [1]
atto (since C++11) std :: ratio < 1 , 1000000000000000000 > (10 -18 )
femto (начиная с C++11) std :: ratio < 1 , 1000000000000000 > (10 -15 )
pico (начиная с C++11) std :: ratio < 1 , 1000000000000 > (10 -12 )
nano (начиная с C++11) std :: ratio < 1 , 1000000000 > (10 -9 )
micro (начиная с C++11) std :: ratio < 1 , 1000000 > (10 -6 )
milli (начиная с C++11) std :: ratio < 1 , 1000 > (10 -3 )
centi (since C++11) std :: ratio < 1 , 100 > (10 -2 )
deci (начиная с C++11) std :: ratio < 1 , 10 > (10 -1 )
deca (since C++11) std :: ratio < 10 , 1 > (10 1 )
hecto (since C++11) std :: ratio < 100 , 1 > (10 2 )
kilo (начиная с C++11) std :: ratio < 1000 , 1 > (10 3 )
mega (начиная с C++11) std :: ratio < 1000000 , 1 > (10 6 )
giga (начиная с C++11) std :: ratio < 1000000000 , 1 > (10 9 )
tera (начиная с C++11) std :: ratio < 1000000000000 , 1 > (10 12 )
peta (начиная с C++11) std :: ratio < 1000000000000000 , 1 > (10 15 )
exa (начиная с C++11) std :: ratio < 1000000000000000000 , 1 > (10 18 )
zetta (начиная с C++11) std :: ratio < 1000000000000000000000 , 1 > (10 21 ) [2]
yotta (since C++11) std :: ratio < 1000000000000000000000000 , 1 > (10 24 ) [2]
ronna (начиная с C++26) std :: ratio < 1000000000000000000000000000 , 1 > (10 27 ) [2]
quetta (начиная с C++26) std :: ratio < 1000000000000000000000000000000 , 1 > (10 30 ) [2]
  1. 1.0 1.1 1.2 1.3 Эти typedef объявляются только если std::intmax_t может представить знаменатель.
  2. 2.0 2.1 2.2 2.3 Эти typedef объявляются только если std::intmax_t может представить числитель.

Содержание

Вложенные типы

Тип Определение
type std :: ratio < num, den > (рациональный тип после сокращения)

Члены данных

В приведенных ниже определениях,

  • sign ( Denom ) равен - 1 если Denom отрицателен, или 1 в противном случае; и
  • gcd ( Num, Denom ) является наибольшим общим делителем std :: abs ( Num ) и std :: abs ( Denom ) .
Член Определение
constexpr std:: intmax_t num
[static]
sign ( Denom ) * Num / gcd ( Num, Denom )
(публичная статическая константа-член)
constexpr std:: intmax_t den
[static]
std :: abs ( Denom ) / gcd ( Num, Denom )
(публичная статическая константа-член)

Примечания

Feature-test macro Value Std Feature
__cpp_lib_ratio 202306L (C++26) Добавление новых префиксов СИ 2022 года: quecto, quetta, ronto, ronna

Пример

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

Смотрите также

Математические константы (C++20) предоставляет несколько математических констант, таких как std::numbers::e для e