std::ratio_subtract(3)

πŸ“¦
version 2024.07.05 Β· 2 versions
, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

Okay so this is std::ratio_subtract(3) from the C++ Standard Libary manual, bestie. The name is literally std::ratio_subtract β€” std::ratio_subtract. No cap, that's the page πŸ’…

🌸 Synopsis 🌸

(since C++11) β€” defined in header <ratio>:

template< class R1, class R2 >
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_subtract<std::ratio<1, 2>, std::ratio<1, 6>> is the same type as std::ratio<1, 3>.

✨ Example ✨

Here's the example, exactly as given β€” run this code:

// 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)

That's the whole vibe, bestie 🫢 β€” source: http://cppreference.com, version/date: 2024.06.10, page: std::ratio_subtract(3). Mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from