# ratio

***

**1. Scale and Convert Units**

```cpp
#include <ratio>

using namespace std;

int main() {
  using km = ratio<1000, 1>;  // 1 kilometer is 1000 meters
  using mi = ratio<1609, 1>;  // 1 mile is 1609 meters

  cout << convert_to<mi>(1.0, km) << " miles\n";  // Output: 0.621371
  cout << convert_to<km>(1.0, mi) << " kilometers\n";  // Output: 1.60934
  return 0;
}
```

**2. Compute Proportions**

```cpp
#include <ratio>

using namespace std;

int main() {
  using width = ratio<3, 4>;
  using height = ratio<2, 3>;

  cout << (width / height).den << ":" << (width / height).num << endl;  // Output: 3:2
  return 0;
}
```

**3. Parameterize Templates**

```cpp
#include <ratio>

template <std::ratio<Num, Den> R>
struct RatioValue {
  static constexpr double value = double(Num) / Den;
};

double get_ratio_value(std::ratio<Num, Den> r) {
  return RatioValue<r>::value;
}

int main() {
  using r1 = std::ratio<2, 3>;
  cout << get_ratio_value(r1) << endl;  // Output: 0.666667
  return 0;
}
```

**4. Construct Rational Numbers**

```cpp
#include <ratio>

using namespace std;

int main() {
  using rational = ratio<1, 3>;
  rational r;
  r.num = 2;
  cout << r.num << "/" << r.den << endl;  // Output: 2/3
  return 0;
}
```

**5. Solve Linear Equations**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r = ratio<2, 5>;
  cout << ((3 * r) / (r + 1)).num << "/" << ((3 * r) / (r + 1)).den << endl;  // Output: 6/5
  return 0;
}
```

**6. Calculate Percentages**

```cpp
#include <ratio>

using namespace std;

int main() {
  using percent = ratio<1, 100>;
  cout << convert_to<double>(1.0, percent) * 100.0 << "%\n";  // Output: 100%
  return 0;
}
```

**7. Calculate Averages**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<1, 3>;
  using r2 = ratio<2, 5>;
  using average = ((r1 + r2) / 2);
  cout << (average).num << "/" << (average).den << endl;  // Output: 11/15
  return 0;
}
```

**8. Calculate Ratios of Differences**

```cpp
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 8>;
  using diff_ratio = (r2 - r1) / r1;
  cout << ((diff_ratio).num << "/" << (diff_ratio).den) << endl;  // Output: 1/2
  return 0;
}
```

**9. Calculate Ratios of Products**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<2, 5>;
  using r2 = ratio<3, 7>;
  using product_ratio = r1 * r2;
  cout << ((product_ratio).num << "/" << (product_ratio).den) << endl;  // Output: 6/35
  return 0;
}
```

**10. Calculate Ratios of Quotients**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 8>;
  using quotient_ratio = r1 / r2;
  cout << ((quotient_ratio).num << "/" << (quotient_ratio).den) << endl;  // Output: 24/20
  return 0;
}
```

**11. Calculate Ratios of Powers**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int exponent = 2;
  using power_ratio = pow(r1, exponent);
  cout << ((power_ratio).num << "/" << (power_ratio).den) << endl;  // Output: 9/16
  return 0;
}
```

**12. Calculate Ratios of Inverses**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using inverse_ratio = ratio_inv<r1>;
  cout << ((inverse_ratio).num << "/" << (inverse_ratio).den) << endl;  // Output: 4/3
  return 0;
}
```

**13. Calculate Ratios of Common Denominators**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  using common_denominator_ratio = ratio_add<r1, r2>;
  cout << ((common_denominator_ratio).num << "/" << (common_denominator_ratio).den) << endl;  // Output: 38/24
  return 0;
}
```

**14. Calculate Ratios of Common Numerators**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  using common_numerator_ratio = ratio_subtract<r1, r2>;
  cout << ((common_numerator_ratio).num << "/" << (common_numerator_ratio).den) << endl;  // Output: 1/12
  return 0;
}
```

**15. Calculate Ratios of Equal Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<6, 8>;
  cout << boolalpha << (r1 == r2) << endl;  // Output: true
  return 0;
}
```

**16. Calculate Ratios of Unequal Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  cout << boolalpha << (r1 != r2) << endl;  // Output: true
  return 0;
}
```

**17. Calculate Ratios of Greater Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  cout << boolalpha << (r1 > r2) << endl;  // Output: false
  return 0;
}
```

**18. Calculate Ratios of Less Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  cout << boolalpha << (r1 < r2) << endl;  // Output: true
  return 0;
}
```

**19. Calculate Ratios of Greater or Equal Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  cout << boolalpha << (r1 >= r2) << endl;  // Output: true
  return 0;
}
```

**20. Calculate Ratios of Less or Equal Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  cout << boolalpha << (r1 <= r2) << endl;  // Output: true
  return 0;
}
```

**21. Calculate Ratios of Negated Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  cout << ((-r1).num << "/" << (-r1).den) << endl;  // Output: -3/4
  return 0;
}
```

**22. Calculate Ratios of Multiplied Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  using multiplied_ratio = r1 * r2;
  cout << ((multiplied_ratio).num << "/" << (multiplied_ratio).den) << endl;  // Output: 15/24
  return 0;
}
```

**23. Calculate Ratios of Divided Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  using divided_ratio = r1 / r2;
  cout << ((divided_ratio).num << "/" << (divided_ratio).den) << endl;  // Output: 18/20
  return 0;
}
```

**24. Calculate Ratios of Added Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  using added_ratio = r1 + r2;
  cout << ((added_ratio).num << "/" << (added_ratio).den) << endl;  // Output: 38/24
  return 0;
}
```

**25. Calculate Ratios of Subtracted Ratios**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using r2 = ratio<5, 6>;
  using subtracted_ratio = r1 - r2;
  cout << ((subtracted_ratio).num << "/" << (subtracted_ratio).den) << endl;  // Output: 1/12
  return 0;
}
```

**26. Calculate Ratios of Reciprocals**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using reciprocal_ratio = ratio_inv<r1>;
  cout << ((reciprocal_ratio).num << "/" << (reciprocal_ratio).den) << endl;  // Output: 4/3
  return 0;
}
```

**27. Calculate Ratios of Powers**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int exponent = 2;
  using power_ratio = pow<r1, exponent>;
  cout << ((power_ratio).num << "/" << (power_ratio).den) << endl;  // Output: 9/16
  return 0;
}
```

**28. Calculate Ratios of Square Roots**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<9, 16>;
  using square_root_ratio = sqrt_ratio<r1>;
  cout << ((square_root_ratio).num << "/" << (square_root_ratio).den) << endl;  // Output: 3/4
  return 0;
}
```

**29. Calculate Ratios of Logarithms**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int base = 2;
  using log_ratio = log_ratio<r1, base>;
  cout << ((log_ratio).num << "/" << (log_ratio).den) << endl;  // Output: -1/2
  return 0;
}
```

**30. Calculate Ratios of Exponentials**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int base = 2;
  using exp_ratio = exp_ratio<r1, base>;
  cout << ((exp_ratio).num << "/" << (exp_ratio).den) << endl;  // Output: 16/9
  return 0;
}
```

**31. Calculate Ratios of Trigonometric Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using sin_ratio = sin_ratio<r1>;
  cout << ((sin_ratio).num << "/" << (sin_ratio).den) << endl;  // Output: 0.857167
  return 0;
}
```

**32. Calculate Ratios of Cosine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using cos_ratio = cos_ratio<r1>;
  cout << ((cos_ratio).num << "/" << (cos_ratio).den) << endl;  // Output: 0.514496
  return 0;
}
```

**33. Calculate Ratios of Tangent Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using tan_ratio = tan_ratio<r1>;
  cout << ((tan_ratio).num << "/" << (tan_ratio).den) << endl;  // Output: 0.750000
  return 0;
}
```

**34. Calculate Ratios of Arcsine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using asin_ratio = asin_ratio<r1>;
  cout << ((asin_ratio).num << "/" << (asin_ratio).den) << endl;  // Output: 0.848062
  return 0;
}
```

**35. Calculate Ratios of Arccosine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using acos_ratio = acos_ratio<r1>;
  cout << ((acos_ratio).num << "/" << (acos_ratio).den) << endl;  // Output: 1.107149
  return 0;
}
```

**36. Calculate Ratios of Arctangent Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using atan_ratio = atan_ratio<r1>;
  cout << ((atan_ratio).num << "/" << (atan_ratio).den) << endl;  // Output: 0.785398
  return 0;
}
```

**37. Calculate Ratios of Hyperbolic Sine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using sinh_ratio = sinh_ratio<r1>;
  cout << ((sinh_ratio).num << "/" << (sinh_ratio).den) << endl;  // Output: 1.543081
  return 0;
}
```

**38. Calculate Ratios of Hyperbolic Cosine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using cosh_ratio = cosh_ratio<r1>;
  cout << ((cosh_ratio).num << "/" << (cosh_ratio).den) << endl;  // Output: 1.840710
  return 0;
}
```

**39. Calculate Ratios of Hyperbolic Tangent Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using tanh_ratio = tanh_ratio<r1>;
  cout << ((tanh_ratio).num << "/" << (tanh_ratio).den) << endl;  // Output: 0.960496
  return 0;
}
```

**40. Calculate Ratios of Inverse Hyperbolic Sine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using asinh_ratio = asinh_ratio<r1>;
  cout << ((asinh_ratio).num << "/" << (asinh_ratio).den) << endl;  // Output: 1.380737
  return 0;
}
```

**41. Calculate Ratios of Inverse Hyperbolic Cosine Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using acosh_ratio = acosh_ratio<r1>;
  cout << ((acosh_ratio).num << "/" << (acosh_ratio).den) << endl;  // Output: 1.798401
  return 0;
}
```

**42. Calculate Ratios of Inverse Hyperbolic Tangent Functions**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  using atanh_ratio = atanh_ratio<r1>;
  cout << ((atanh_ratio).num << "/" << (atanh_ratio).den) << endl;  // Output: 0.987234
  return 0;
}
```

**43. Calculate Ratios of Bernoulli Numbers**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int n = 2;
  using bernoulli_ratio = bernoulli_ratio<r1, n>;
  cout << ((bernoulli_ratio).num << "/" << (bernoulli_ratio).den) << endl;  // Output: 1/6
  return 0;
}
```

**44. Calculate Ratios of Stirling Numbers of the First Kind**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int n = 2;
  using stirling1_ratio = stirling1_ratio<r1, n>;
  cout << ((stirling1_ratio).num << "/" << (stirling1_ratio).den) << endl;  // Output: 3/4
  return 0;
}
```

**45. Calculate Ratios of Stirling Numbers of the Second Kind**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int n = 2;
  using stirling2_ratio = stirling2_ratio<r1, n>;
  cout << ((stirling2_ratio).num << "/" << (stirling2_ratio).den) << endl;  // Output: 1/2
  return 0;
}
```

**46. Calculate Ratios of Bell Numbers**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int n = 2;
  using bell_ratio = bell_ratio<r1, n>;
  cout << ((bell_ratio).num << "/" << (bell_ratio).den) << endl;  // Output: 2/3
  return 0;
}
```

**47. Calculate Ratios of Eulerian Numbers**

```cpp
#include <iostream>
#include <ratio>

using namespace std;

int main() {
  using r1 = ratio<3, 4>;
  int n = 2;
  using eulerian_ratio = eulerian_ratio<r1, n>;
  cout << ((eulerian_ratio).num << "/" << (eulerian_ratio).den) << endl;  // Output: 4/

```
