Пространства имён
Варианты
Действия

std::ratio

Материал из cppreference.com
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
(C++11)(C++11)(C++11)
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
 
<tbody> </tbody>
Определено в заголовочном файле <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]
  1. 1,0 1,1 1,2 1,3 Эти определения типов определяются только в том случае, если std::intmax_t может представлять знаменатель.
  2. 2,0 2,1 2,2 2,3 Эти определения типов определяются только в том случае, если std::intmax_t может представлять числитель.

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

Тип Определение
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 [править]