Solution: GCD of Two Real Numbers Using the Trailing <requires> c

Get an overview of how to find the GCD of two real numbers using the <requires> clause.

We'll cover the following

Solution

As we saw earlier, this solution is based on Euclid’s algorithm. On line 7, we create a concept Number and on line 10 it is required by the function for both the template parameters. As the same concept is required for both template parameters, only floating-point numbers can be passed to the function.

The function gcd() is based on the following observation: if d divides a and d divides b, d divides a - b as well. So, the GCD of a and b is the same as the GCD of a - b and b.

  • If a > b, replace b with a and call the function itself again.
  • Stop if fabs(b) < 0.001. The GCD of a and b, of course, is a. If not, go to the next step. Here, fabs() is a function in the cmath library that returns the absolute value of a number as a float.
  • If a > b, replace a with a - b, then go to the first step.
  • If fabs(b) >= 0.001, replace a with b, replace b with a - floor(a / b) * b, and call the function itself again.

Get hands-on with 1200+ tech skills courses.