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

add Math.absExact

    XMLWordPrintable

Details

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

    Description

      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)

      Attachments

        Issue Links

          Activity

            People

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

              Dates

                Created:
                Updated:
                Resolved: