From cppreference.com
template<classR1,classR2>usingratio_divide=/* see below */;(since C++11)The alias template std::ratio_divide denotes the result of dividing two exact rational fractions represented by the
specializations R1 and R2.
The result is a
specialization std::ratio<U,V>, such that given Num==R1::num*R2::den and Denom==R1::den*R2::num (computed without arithmetic overflow), U is std::ratio<Num,Denom>::num and V is std::ratio<Num,Denom>::den.
Notes
If U or V is not representable in
, the program is ill-formed. If Num or Denom is not representable in
, the program is ill-formed unless the implementation yields correct values for U and V.
The above definition requires that the result of std::ratio_divide<R1,R2> be already reduced to lowest terms; for example, std::ratio_divide<std::ratio<1,12>,std::ratio<1,6>> is the same type as std::ratio<1,2>.
Example
Run this code
#include<iostream>#include<ratio>intmain(){usingtwo_third=std::ratio<2,3>;usingone_sixth=std::ratio<1,6>;usingquotient=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';}Output:
(2/3) / (1/6) = 4/1 See also