Необходимо реализовать класс неизменяемого рационального числа, предоставляющий следующие операции:
- Конструирование без аргументов
- Конструирование от int64_t
- Конструирование от числителя и знаменателя (типа int64_t)
- Числитель: int64_t numerator()
- Знаменатель: uint64_t denominator()
- Явное приведение к double
- Перевод в строку: std::string str()
- Сложение: +, +=
- Вычитание: -, -=
- Умножение: *, *=
- Деление: /, /=
- Унарный минус: -
- Операции сравнения: ==, !=, <, <=, >, >=
Дробь должна всегда быть в сокращённом состоянии.
Обработка ошибок не требуется, однако операции стоит реализовывать так, чтобы минимизировать вероятность переполнения.
Допустимо добавление в публичный интерфейс дополнительных методов, если они семантически действительно должны быть публичными.