This is an automated email from the ASF dual-hosted git repository. erans pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-numbers.git
commit 056b268a8e168177c9744744cf2f33f6e9c0376b Author: Gilles Sadowski <[email protected]> AuthorDate: Thu Jun 3 23:01:07 2021 +0200 NUMBERS-161: Special case. --- .../src/main/java/org/apache/commons/numbers/angle/Angle.java | 11 ++++++----- .../test/java/org/apache/commons/numbers/angle/AngleTest.java | 6 +++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/commons-numbers-angle/src/main/java/org/apache/commons/numbers/angle/Angle.java b/commons-numbers-angle/src/main/java/org/apache/commons/numbers/angle/Angle.java index 64ea55e..54dcde9 100644 --- a/commons-numbers-angle/src/main/java/org/apache/commons/numbers/angle/Angle.java +++ b/commons-numbers-angle/src/main/java/org/apache/commons/numbers/angle/Angle.java @@ -347,11 +347,12 @@ public abstract class Angle implements DoubleSupplier { return normalized < hi ? normalized : // If value is too small to be representable compared to the - // floor expression above (ie, if value + x = x), then we may - // end up with a number exactly equal to the upper bound here. - // In that case, subtract one from the normalized value so that - // we can fulfill the contract of only returning results strictly - // less than the upper bound. + // floor expression above (i.e. value + x = x), then we may + // end up with a number exactly equal to the upper bound. + // In that case, subtract one period from the normalized value + // so that the result is strictly less than the upper bound. + normalized == hi ? + lo : // Ensure that the result is not below the lower bound. normalized - period; } } diff --git a/commons-numbers-angle/src/test/java/org/apache/commons/numbers/angle/AngleTest.java b/commons-numbers-angle/src/test/java/org/apache/commons/numbers/angle/AngleTest.java index 54ac3e3..92fda4b 100644 --- a/commons-numbers-angle/src/test/java/org/apache/commons/numbers/angle/AngleTest.java +++ b/commons-numbers-angle/src/test/java/org/apache/commons/numbers/angle/AngleTest.java @@ -205,6 +205,10 @@ class AngleTest { Assertions.assertEquals(x, normalizer.apply(Angle.Rad.of(x)).getAsDouble()); Assertions.assertEquals(above, normalizer.apply(Angle.Rad.of(above)).getAsDouble()); - // Assertions.assertEquals(below + 2 * Math.PI, normalizer.apply(Angle.Rad.of(below)).getAsDouble()); + + // "below" is so close to "x" that below + Math.PI = x + Math.PI + // In this case, we can't return below + Math.PI because that is exactly equal to the + // upper bound of the range. Instead, we must return the lower bound of x. + Assertions.assertEquals(x, normalizer.apply(Angle.Rad.of(below)).getAsDouble()); } }
