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 may not be equal to the most negative value. Both numerator and denominator are automatically reduced to the lowest terms.

Several convenience typedefs that correspond to the SI ratios are provided by the standard library:

Defined in header <ratio>

Type

Definition

yocto

std::ratio<1, 1000000000000000000000000>, if std::intmax_t can represent the denominator

zepto

std::ratio<1, 1000000000000000000000>, if std::intmax_t can represent the denominator

atto

std::ratio<1, 1000000000000000000>

femto

std::ratio<1, 1000000000000000>

pico

std::ratio<1, 1000000000000>

nano

std::ratio<1, 1000000000>

micro

std::ratio<1, 1000000>

milli

std::ratio<1, 1000>

centi

std::ratio<1, 100>

deci

std::ratio<1, 10>

deca

std::ratio<10, 1>

hecto

std::ratio<100, 1>

kilo

std::ratio<1000, 1>

mega

std::ratio<1000000, 1>

giga

std::ratio<1000000000, 1>

tera

std::ratio<1000000000000, 1>

peta

std::ratio<1000000000000000, 1>

exa

std::ratio<1000000000000000000, 1>

zetta

std::ratio<1000000000000000000000, 1>, if std::intmax_t can represent the numerator

yotta

std::ratio<1000000000000000000000000, 1>, if std::intmax_t can represent the numerator