std::ratio
| Определено в заголовочном файле <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>.
Следующие удобные определения типов, соответствующие соотношениям SI, предоставляются стандартной библиотекой:
Определены в заголовочном файле
<ratio> | |
| Тип | Определение |
quecto (начиная с C++26)
|
std::ratio<1, 1000000000000000000000000000000> (10-30)[1]
|
ronto (начиная с C++26)
|
std::ratio<1, 1000000000000000000000000000> (10-27)[1]
|
yocto
|
std::ratio<1, 1000000000000000000000000> (10-24)[1]
|
zepto
|
std::ratio<1, 1000000000000000000000> (10-21)[1]
|
atto
|
std::ratio<1, 1000000000000000000> (10-18)
|
femto
|
std::ratio<1, 1000000000000000> (10-15)
|
pico
|
std::ratio<1, 1000000000000> (10-12)
|
nano
|
std::ratio<1, 1000000000> (10-9)
|
micro
|
std::ratio<1, 1000000> (10-6)
|
milli
|
std::ratio<1, 1000> (10-3)
|
centi
|
std::ratio<1, 100> (10-2)
|
deci
|
std::ratio<1, 10> (10-1)
|
deca
|
std::ratio<10, 1> (101)
|
hecto
|
std::ratio<100, 1> (102)
|
kilo
|
std::ratio<1000, 1> (103)
|
mega
|
std::ratio<1000000, 1> (106)
|
giga
|
std::ratio<1000000000, 1> (109)
|
tera
|
std::ratio<1000000000000, 1> (1012)
|
peta
|
std::ratio<1000000000000000, 1> (1015)
|
exa
|
std::ratio<1000000000000000000, 1> (1018)
|
zetta
|
std::ratio<1000000000000000000000, 1> (1021)[2]
|
yotta
|
std::ratio<1000000000000000000000000, 1> (1024)[2]
|
ronna (начиная с C++26)
|
std::ratio<1000000000000000000000000000, 1> (1027)[2]
|
quetta (начиная с C++26)
|
std::ratio<1000000000000000000000000000000, 1> (1030)[2]
|
Вложенные типы
| Тип | Определение |
type
|
std::ratio<num, den> (рациональный тип после редукции)
|
Типы элементы
| Тип элемент | Определение |
type
|
std::ratio<num, den>
|
Элементы данных
В определениях, приведенных ниже,
sign(Denom)равно-1, еслиDenomотрицательно, или1иначе; иgcd(Num, Denom)наибольший общий делительstd::abs(Num)иstd::abs(Denom).
| Элемент | Определение |
num [static] |
sign(Denom) * Num / gcd(Num, Denom) (public static константа-элемент) |
den [static] |
std::abs(Denom) / gcd(Num, Denom) (public static константа-элемент) |
Примечание
| Макрос тест функциональности | |||
|---|---|---|---|
__cpp_lib_ratio |
202306L |
(C++26) | Добавление новых префиксов SI 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 |