std::ratio
<ratio>
std::intmax_t Num,
std::intmax_t Denom = 1
The class template std::ratio
provides compile-time rational arithmetic support. Each instantiation of this template exactly represents any finite rational number as long as its numerator Num
and denominator Denom
are representable as compile-time constants of type std::intmax_t . In addition, Denom
may not be zero and both Num
and Denom
may not be equal to the most negative value.
The static data members num
and den
representing the numerator and denominator are calculated by dividing Num
and Denom
by their greatest common divisor. However, two std::ratio
with different Num
or Denom
are distinct types even if they represent the same rational number (after reduction). A std::ratio
type can be reduced to the lowest terms via its type
member: std::ratio<3, 6>::type is std::ratio<1, 2>.
The following convenience typedefs that correspond to the SI ratios are provided by the standard library:
<ratio>
atto
(since C++11)
std::ratio<1, 1000000000000000000>
(10-18)
femto
(since C++11)
std::ratio<1, 1000000000000000>
(10-15)
pico
(since C++11)
std::ratio<1, 1000000000000>
(10-12)
nano
(since C++11)
std::ratio<1, 1000000000>
(10-9)
micro
(since C++11)
std::ratio<1, 1000000>
(10-6)
milli
(since C++11)
std::ratio<1, 1000>
(10-3)
centi
(since C++11)
std::ratio<1, 100>
(10-2)
deci
(since C++11)
std::ratio<1, 10>
(10-1)
deca
(since C++11)
std::ratio<10, 1>
(101)
hecto
(since C++11)
std::ratio<100, 1>
(102)
kilo
(since C++11)
std::ratio<1000, 1>
(103)
mega
(since C++11)
std::ratio<1000000, 1>
(106)
giga
(since C++11)
std::ratio<1000000000, 1>
(109)
tera
(since C++11)
std::ratio<1000000000000, 1>
(1012)
peta
(since C++11)
std::ratio<1000000000000000, 1>
(1015)
exa
(since C++11)
std::ratio<1000000000000000000, 1>
(1018)
- ↑ 1.0 1.1 1.2 1.3 These typedefs are only declared if std::intmax_t can represent the denominator.
- ↑ 2.0 2.1 2.2 2.3 These typedefs are only declared if std::intmax_t can represent the numerator.
[edit] Nested types
type
std::ratio<num, den> (the rational type after reduction)
[edit] Data members
In the definitions given below,
- sign(Denom) is -1 if Denom is negative, or 1 otherwise; and
- gcd(Num, Denom) is the greatest common divisor of std::abs(Num) and std::abs(Denom).
(public static member constant)
(public static member constant)
[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_ratio |
202306L |
(C++26) | Adding the new 2022 SI prefixes: quecto, quetta, ronto, ronna |
[edit] Example
#include <ratio> static_assert ( std::ratio_equal_v <std::ratio_multiply <std::femto, std::exa>, std::kilo> ); int main() {}