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 {
  public:
    static constexpr intmax_t num;
    static constexpr intmax_t den;
    using type = ratio<num, den>;
  };
}

Если аргумент шаблона D равен нулю или равен абсолютным значениям любого из аргументов шаблона N и D не может быть представлен по типу intmax_­t, программа имеет неправильный формат. [ Note: Эти правила гарантируют, что можно избежать бесконечных соотношений и что для любого отрицательного входа существует представимое значение его абсолютного значения, которое является положительным. В представлении с дополнением до двух это исключает самое отрицательное значение. ] end note

Статические элементы данных num и den должны иметь следующие значения, где gcd представляет наибольший общий делитель абсолютных значений N и D:

  • num имеет ценность sign(N) * sign(D) * abs(N) / gcd.

  • den имеет ценность abs(D) / gcd.