Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8241805

add Math.absExact

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P4 P4
    • 15
    • core-libs
    • None
    • minimal
    • Adding new static methods.
    • Java API
    • SE

      Summary

      Add a companion set of absolute value methods for int and long which throw an exception on the most negative value, whose absolute value is not representable in the same format.

      Problem

      It is surprising, but true that Math.abs(Integer.MIN_VALUE) equals Integer.MIN_VALUE, a negative value; the some relationship holds for Long.MIN_VALUE. Having absolute value methods which threw exceptions for these exceptional cases would help remove bugs for an easy to overlook case.

      Solution

      Add absExact methods for int and long to java.lang.Math and java.lang.StrictMath.

      Specification

      Equivalent methods are added to java.lang.Math and java.lang.StrictMath:

           /**
      +     * Returns the mathematical absolute value of an {@code int} value
      +     * if it is exactly representable as an {@code int}, throwing
      +     * {@code ArithmeticException} if the result overflows the
      +     * positive {@code int} range.
      +     *
      +     * <p>Since the range of two's complement integers is asymmetric
      +     * with one additional negative value, the mathematical absolute
      +     * value of {@link Integer#MIN_VALUE} overflows the positive
      +     * {@code int} range, so an exception is thrown for that argument.
      +     *
      +     * @param  a  the argument whose absolute value is to be determined
      +     * @return the absolute value of the argument, unless overflow occurs
      +     * @throws ArithmeticException if the argument is {@link Integer#MIN_VALUE}
      +     * @see Math#abs(int)
      +     * @since 15
      +     * @see Math#absExact(long)
      +     */
      +    public static int absExact(int a)
      
           /**
      +     * Returns the mathematical absolute value of an {@code long} value
      +     * if it is exactly representable as an {@code long}, throwing
      +     * {@code ArithmeticException} if the result overflows the
      +     * positive {@code long} range.
      +     *
      +     * <p>Since the range of two's complement integers is asymmetric
      +     * with one additional negative value, the mathematical absolute
      +     * value of {@link Long#MIN_VALUE} overflows the positive
      +     * {@code long} range, so an exception is thrown for that argument.
      +     *
      +     * @param  a  the argument whose absolute value is to be determined
      +     * @return the absolute value of the argument, unless overflow occurs
      +     * @throws ArithmeticException if the argument is {@link Long#MIN_VALUE}
      +     * @see Math#abs(long)
      +     * @since 15
      +     */
      +    public static long absExact(long a)

            darcy Joe Darcy
            smarks Stuart Marks
            Chris Hegarty, Stuart Marks
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: