std:: ratio_divide
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++11)
|
||||
| Arithmetic | ||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
ratio_divide
(C++11)
|
||||
| Comparison | ||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
|
Определено в заголовочном файле
<ratio>
|
||
|
template
<
class
R1,
class
R2
>
using ratio_divide = /* см. ниже */ ; |
(начиная с C++11) | |
Псевдоним шаблона
std::ratio_divide
обозначает результат деления двух точных рациональных дробей, представленных специализациями
std::ratio
R1
и
R2
.
Результатом является
std::ratio
специализация
std::
ratio
<
U, V
>
, такая что при заданных
Num
==
R1
::
num
*
R2
::
den
и
Denom
==
R1
::
den
*
R2
::
num
(вычисленных без арифметического переполнения),
U
равно
std::
ratio
<
Num, Denom
>
::
num
, а
V
равно
std::
ratio
<
Num, Denom
>
::
den
.
Примечания
Если
U
или
V
не представимы в
std::intmax_t
, программа является некорректной. Если
Num
или
Denom
не представимы в
std::intmax_t
, программа является некорректной, если реализация не предоставляет корректные значения для
U
и
V
.
Приведённое выше определение требует, чтобы результат std :: ratio_divide < R1, R2 > был уже сокращён до наименьших членов; например, std :: ratio_divide < std:: ratio < 1 , 12 > , std:: ratio < 1 , 6 >> является тем же типом, что и std:: ratio < 1 , 2 > .
Пример
#include <iostream> #include <ratio> int main() { using two_third = std::ratio<2, 3>; using one_sixth = std::ratio<1, 6>; using quotient = std::ratio_divide<two_third, one_sixth>; static_assert(std::ratio_equal_v<quotient, std::ratio<0B100, 0X001>>); std::cout << "(2/3) / (1/6) = " << quotient::num << '/' << quotient::den << '\n'; }
Вывод:
(2/3) / (1/6) = 4/1
Смотрите также
|
(C++11)
|
умножает два объекта
ratio
во время компиляции
(псевдоним шаблона) |