diff --git a/src/main/java/com/thealgorithms/maths/Floor.java b/src/main/java/com/thealgorithms/maths/Floor.java index 271fc42d0d17..61fa0113d10a 100644 --- a/src/main/java/com/thealgorithms/maths/Floor.java +++ b/src/main/java/com/thealgorithms/maths/Floor.java @@ -1,24 +1,33 @@ package com.thealgorithms.maths; +/** + * Utility class to compute the floor of a given number. + */ public final class Floor { - private Floor() { } /** - * Returns the largest (closest to positive infinity) + * Returns the largest double value that is less than or equal to the input. + * Equivalent to mathematical ⌊x⌋ (floor function). * - * @param number the number - * @return the largest (closest to positive infinity) of given - * {@code number} + * @param number the number to floor + * @return the largest double less than or equal to {@code number} */ public static double floor(double number) { - if (number - (int) number == 0) { + if (Double.isNaN(number) || Double.isInfinite(number) || number == 0.0 || number < Integer.MIN_VALUE || number > Integer.MAX_VALUE) { return number; - } else if (number - (int) number > 0) { - return (int) number; + } + + if (number > 0.0 && number < 1.0) { + return 0.0; + } + + long intPart = (long) number; + if (number < 0 && number != intPart) { + return intPart - 1.0; } else { - return (int) number - 1; + return intPart; } } }