Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
ratio (C++11) | ||||
Arithmetic | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
Comparison | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) |
Defined in header <ratio> | ||
template< std::intmax_t Num, | (since C++11) | |
The class templatestd::ratio
providescompile-time rational arithmetic support. Each instantiation of this template exactly represents any finite rational number as long as its numeratorNum
and denominatorDenom
are representable as compile-time constants of typestd::intmax_t. In addition,Denom
may not be zero and bothNum
andDenom
may not be equal to the most negative value.
The static data membersnum
andden
representing the numerator and denominator are calculated by dividingNum
andDenom
by their greatest common divisor. However, twostd::ratio
with differentNum
orDenom
are distinct types even if they represent the same rational number (after reduction). Astd::ratio
type can be reduced to the lowest terms via itstype
member:std::ratio<3,6>::type isstd::ratio<1,2>.
The following convenience typedefs that correspond to the SI ratios are provided by the standard library:
Defined in header <ratio> | |
Type | Definition |
quecto (since C++26) | std::ratio<1,1000000000000000000000000000000> (10-30)[1] |
ronto (since C++26) | std::ratio<1,1000000000000000000000000000> (10-27)[1] |
yocto (since C++11) | std::ratio<1,1000000000000000000000000> (10-24)[1] |
zepto (since C++11) | std::ratio<1,1000000000000000000000> (10-21)[1] |
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) |
zetta (since C++11) | std::ratio<1000000000000000000000,1> (1021)[2] |
yotta (since C++11) | std::ratio<1000000000000000000000000,1> (1024)[2] |
ronna (since C++26) | std::ratio<1000000000000000000000000000,1> (1027)[2] |
quetta (since C++26) | std::ratio<1000000000000000000000000000000,1> (1030)[2] |
Contents |
Type | Definition |
type | std::ratio<num, den> (the rational type after reduction) |
In the definitions given below,
Member | Definition |
constexprstd::intmax_t num [static] | sign(Denom)* Num/ gcd(Num, Denom) (public static member constant) |
constexprstd::intmax_t den [static] | std::abs(Denom)/ gcd(Num, Denom) (public static member constant) |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_ratio | 202306L | (C++26) | Adding the new 2022 SI prefixes: quecto, quetta, ronto, ronna |
#include <ratio> static_assert(std::ratio_equal_v<std::ratio_multiply<std::femto, std::exa>, std::kilo>); int main(){}
Mathematical constants(C++20) | provides several mathematical constants, such asstd::numbers::e fore[edit] |