23 General utilities library [utilities]

23.16 Compile-time rational arithmetic [ratio]

23.16.3 Class template ratio [ratio.ratio]

namespace std {
  template <intmax_t N, intmax_t D = 1>
  class ratio {
    static constexpr intmax_t num;
    static constexpr intmax_t den;
    using type = ratio<num, den>;
If the template argument D is zero or the absolute values of either of the template arguments N and D is not representable by type intmax_­t, the program is ill-formed.
These rules ensure that infinite ratios are avoided and that for any negative input, there exists a representable value of its absolute value which is positive.
In a two's complement representation, this excludes the most negative value.
end note
The static data members num and den shall have the following values, where gcd represents the greatest common divisor of the absolute values of N and D:
  • num shall have the value sign(N) * sign(D) * abs(N) / gcd.
  • den shall have the value abs(D) / gcd.