Note there is an isFinite method.

if (!Double.isFinite(x)) {
...

The isFinite method is a JVM intrinsic method in JDK 20. It was added
in JDK 8 so can be used in [math].

PMD rules would also change this to a forEach loop:

> +        for (double x : value) {
> +            if (!Double.isFinite(x)) {
> +                throw new NotFiniteNumberException(x);
> +            }
> +        }

This does remove the requirement to declare x = val[i] for reuse of x.

Alex



On Thu, 5 Jan 2023 at 18:54, <er...@apache.org> wrote:
>
> 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-math.git
>
>
> The following commit(s) were added to refs/heads/master by this push:
>      new 093c7ecbf Add "checkFinite" utility method.
> 093c7ecbf is described below
>
> commit 093c7ecbf514d5f196bcb4afd9a67932e9e28f21
> Author: Gilles Sadowski <gillese...@gmail.com>
> AuthorDate: Thu Jan 5 19:52:17 2023 +0100
>
>     Add "checkFinite" utility method.
>
>     Functionality was defined in class "MathUtils" (in v3.6.1).
> ---
>  .../commons/math4/legacy/core/MathArrays.java      | 19 ++++++++++++++++++
>  .../commons/math4/legacy/core/MathArraysTest.java  | 23 
> ++++++++++++++++++++++
>  2 files changed, 42 insertions(+)
>
> diff --git 
> a/commons-math-legacy-core/src/main/java/org/apache/commons/math4/legacy/core/MathArrays.java
>  
> b/commons-math-legacy-core/src/main/java/org/apache/commons/math4/legacy/core/MathArrays.java
> index 7b4284b8f..869d10ad5 100644
> --- 
> a/commons-math-legacy-core/src/main/java/org/apache/commons/math4/legacy/core/MathArrays.java
> +++ 
> b/commons-math-legacy-core/src/main/java/org/apache/commons/math4/legacy/core/MathArrays.java
> @@ -34,6 +34,7 @@ import 
> org.apache.commons.math4.legacy.exception.NotPositiveException;
>  import 
> org.apache.commons.math4.legacy.exception.NotStrictlyPositiveException;
>  import org.apache.commons.math4.legacy.exception.NullArgumentException;
>  import org.apache.commons.math4.legacy.exception.NumberIsTooLargeException;
> +import org.apache.commons.math4.legacy.exception.NotFiniteNumberException;
>  import org.apache.commons.math4.legacy.exception.util.LocalizedFormats;
>  import org.apache.commons.math4.core.jdkmath.JdkMath;
>
> @@ -573,6 +574,24 @@ public final class MathArrays {
>          }
>      }
>
> +    /**
> +     * Check that all the elements are real numbers.
> +     *
> +     * @param val Arguments.
> +     * @throws NotFiniteNumberException if any values of the array is not a
> +     * finite real number.
> +     */
> +    public static void checkFinite(final double[] val)
> +        throws NotFiniteNumberException {
> +        for (int i = 0; i < val.length; i++) {
> +            final double x = val[i];
> +            if (Double.isInfinite(x) ||
> +                Double.isNaN(x)) {
> +                throw new NotFiniteNumberException(val[i]);
> +            }
> +        }
> +    }
> +
>      /**
>       * Check that all entries of the input array are &gt;= 0.
>       *
> diff --git 
> a/commons-math-legacy-core/src/test/java/org/apache/commons/math4/legacy/core/MathArraysTest.java
>  
> b/commons-math-legacy-core/src/test/java/org/apache/commons/math4/legacy/core/MathArraysTest.java
> index 54677765b..99f09ff02 100644
> --- 
> a/commons-math-legacy-core/src/test/java/org/apache/commons/math4/legacy/core/MathArraysTest.java
> +++ 
> b/commons-math-legacy-core/src/test/java/org/apache/commons/math4/legacy/core/MathArraysTest.java
> @@ -31,6 +31,7 @@ import 
> org.apache.commons.math4.legacy.exception.NotANumberException;
>  import org.apache.commons.math4.legacy.exception.NotPositiveException;
>  import 
> org.apache.commons.math4.legacy.exception.NotStrictlyPositiveException;
>  import org.apache.commons.math4.legacy.exception.NullArgumentException;
> +import org.apache.commons.math4.legacy.exception.NotFiniteNumberException;
>  import org.apache.commons.math4.core.jdkmath.JdkMath;
>
>  /**
> @@ -757,4 +758,26 @@ public class MathArraysTest {
>      public void testUniqueNullArgument() {
>          MathArrays.unique(null);
>      }
> +
> +    @Test
> +    public void testCheckFinite() {
> +        try {
> +            MathArrays.checkFinite(new double[] {0, -1, 
> Double.POSITIVE_INFINITY, -2, 3});
> +            Assert.fail("an exception should have been thrown");
> +        } catch (NotFiniteNumberException e) {
> +            // Expected
> +        }
> +        try {
> +            MathArrays.checkFinite(new double[] {1, 
> Double.NEGATIVE_INFINITY, -2, 3});
> +            Assert.fail("an exception should have been thrown");
> +        } catch (NotFiniteNumberException e) {
> +            // Expected
> +        }
> +        try {
> +            MathArrays.checkFinite(new double[] {4, 3, -1, Double.NaN, -2, 
> 1});
> +            Assert.fail("an exception should have been thrown");
> +        } catch (NotFiniteNumberException e) {
> +            // Expected
> +        }
> +    }
>  }
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to