double_equals.h 887 B

123456789101112131415161718192021222324252627282930313233343536
  1. //
  2. // double_equals.h
  3. // limit
  4. //
  5. // Created by Sam Jaffe on 12/9/23.
  6. //
  7. #pragma once
  8. #include <algorithm>
  9. namespace math {
  10. inline bool approx_equal(double lhs, double rhs, double eps) {
  11. double const a = std::abs(lhs);
  12. double const b = std::abs(rhs);
  13. return std::abs(lhs - rhs) <= (std::max(a, b) * eps);
  14. }
  15. inline bool essentially_equal(double lhs, double rhs, double eps) {
  16. double const a = std::abs(lhs);
  17. double const b = std::abs(rhs);
  18. return std::abs(lhs - rhs) <= (std::min(a, b) * eps);
  19. }
  20. inline bool definitely_greater(double lhs, double rhs, double eps) {
  21. double const a = std::abs(lhs);
  22. double const b = std::abs(rhs);
  23. return (lhs - rhs) > (std::max(a, b) * eps);
  24. }
  25. inline bool definitely_less(double lhs, double rhs, double eps) {
  26. double const a = std::abs(lhs);
  27. double const b = std::abs(rhs);
  28. return (rhs - lhs) > (std::max(a, b) * eps);
  29. }
  30. }