From 34ce79f8e896e23348d88b5bfe0c3b7a28d273d8 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 18 Feb 2022 14:51:41 +1100 Subject: Add float.compare_with_tolerance --- src/gleam/float.gleam | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src') diff --git a/src/gleam/float.gleam b/src/gleam/float.gleam index 3f5399e..2e24f0b 100644 --- a/src/gleam/float.gleam +++ b/src/gleam/float.gleam @@ -69,6 +69,26 @@ pub fn compare(a: Float, with b: Float) -> Order { } } +/// Compares two `Float`s within a tolerance. +/// Keep in mind that as this are floats the tolerance won't be exact +/// e.g. 5.3 - 5.0 is not exactly 0.3 in a float +/// +/// ## Examples +/// > loosely_compare(5.0, with: 5.3, tolerating: 0.5) +/// Eq +/// +pub fn loosely_compare( + a: Float, + with b: Float, + tolerating tolerance: Float, +) -> Order { + let diff = absolute_value(a -. b) + case diff <=. tolerance { + True -> order.Eq + False -> compare(a, b) + } +} + /// Compares two `Float`s, returning the smaller of the two. /// /// ## Examples -- cgit v1.2.3