home | help
std::ratio_subtract(3)	       C++ Standard Libary	  std::ratio_subtract(3)

NAME
     std::ratio_subtract - std::ratio_subtract

Synopsis
	Defined in header <ratio>
	template< class R1, class R2 >		 (since C++11)
	using ratio_subtract = /* see below */;

	The alias template std::ratio_subtract denotes the result of subtracting
     two exact
	rational  fractions represented by the std::ratio specializations R1 and
     R2.

	The result is a std::ratio specialization std::ratio<U,  V>,  such  that
     given Num ==
	R1::num  *  R2::den  -	R2::num * R1::den and Denom == R1::den * R2::den
     (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 std::intmax_t,  the  program	is  ill-
     formed. If Num
	or  Denom  is  not  representable  in std::intmax_t, 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_subtract<R1,
     R2> be
	already  reduced  to  lowest   terms;	for   example,	 std::ratio_sub-
     tract<std::ratio<1, 2>,
	std::ratio<1, 6>> is the same type as std::ratio<1, 3>.

Example
     // Run this code

      #include <iostream>
      #include <ratio>

      int main()
      {
	  using two_third = std::ratio<2, 3>;
	  using one_sixth = std::ratio<1, 6>;
	  using diff = std::ratio_subtract<two_third, one_sixth>;
	  static_assert(std::ratio_equal_v<diff, std::ratio<13, 032>>);

	  std::cout << "2/3 - 1/6 = " << diff::num << '/' << diff::den << '\n';
      }

Output:
      2/3 - 1/6 = 1/2

See also
	ratio_add adds two ratio objects at compile-time
	(C++11)   (alias template)

http://cppreference.com 	   2024.06.10		  std::ratio_subtract(3)

home | help