Skip to content

Commit 57a165b

Browse files
authored
refactor: improve Floor method to handle edge cases
- Add edge case handling for NaN, Infinity, and out-of-bounds values - Improve consistency with Ceil.java implementation - Add handling for positive numbers between 0 and 1 - Update Javadoc to match Ceil.java format and clarity - Use long cast to handle larger numbers correctly
1 parent a14e1e3 commit 57a165b

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed
Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,33 @@
11
package com.thealgorithms.maths;
22

3+
/**
4+
* Utility class to compute the floor of a given number.
5+
*/
36
public final class Floor {
4-
57
private Floor() {
68
}
79

810
/**
9-
* Returns the largest (closest to positive infinity)
11+
* Returns the largest double value that is less than or equal to the input.
12+
* Equivalent to mathematical ⌊x⌋ (floor function).
1013
*
11-
* @param number the number
12-
* @return the largest (closest to positive infinity) of given
13-
* {@code number}
14+
* @param number the number to floor
15+
* @return the largest double less than or equal to {@code number}
1416
*/
1517
public static double floor(double number) {
16-
if (number - (int) number == 0) {
18+
if (Double.isNaN(number) || Double.isInfinite(number) || number == 0.0 || number < Integer.MIN_VALUE || number > Integer.MAX_VALUE) {
1719
return number;
18-
} else if (number - (int) number > 0) {
19-
return (int) number;
20+
}
21+
22+
if (number > 0.0 && number < 1.0) {
23+
return 0.0;
24+
}
25+
26+
long intPart = (long) number;
27+
if (number < 0 && number != intPart) {
28+
return intPart - 1.0;
2029
} else {
21-
return (int) number - 1;
30+
return intPart;
2231
}
2332
}
2433
}

0 commit comments

Comments
 (0)