# std::ratio

< cpp‎ | numeric‎ | 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` 与 `den` 表示由将 `Num` 与 `Denom` 除以其最大公约数的分子与分母。然而，二个有相异的 `Num` 或 `Denom` 的 `std::ratio` 是不同的类型，即使它们表示同一有理数（在约分后）。能经由其 `type` 成员约分 `ratio` 类型到最简分数： `std::ratio<3, 6>::type` 为 `std::ratio<1, 2>` 。

标准库提供数个对应 SI 比例的便利 typedef ：

定义于头文件 `<ratio>`
类型 | 定义
`yocto` | std::ratio<1, 1000000000000000000000000> ，若 std::intmax_t 能表示分母
`zepto` | std::ratio<1, 1000000000000000000000> ，若 std::intmax_t 能表示分母
`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> ，若 std::intmax_t 能表示分子
`yotta` | std::ratio<1000000000000000000000000, 1> ，若 std::intmax_t 能表示分子

### 成员类型

成员类型 | 定义
`type` | std::ratio<num, den>

### 成员对象

constexpr intmax_t num [静态] | std::intmax_t 类型的 constexpr 值，等于 `sign(Num) * sign(Denom) * abs(Num) / gcd(Num, Denom)` (公开静态成员常量)
constexpr intmax_t den [静态] | std::intmax_t 类型的 constexpr 值，等于 `abs(Denom) / gcd(Num, Denom)` (公开静态成员常量)