Home | History | Annotate | Download | only in lang
      1 /*
      2  * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package java.lang;
     27 
     28 import sun.misc.FloatingDecimal;
     29 import sun.misc.FpUtils;
     30 import sun.misc.DoubleConsts;
     31 
     32 /**
     33  * The {@code Double} class wraps a value of the primitive type
     34  * {@code double} in an object. An object of type
     35  * {@code Double} contains a single field whose type is
     36  * {@code double}.
     37  *
     38  * <p>In addition, this class provides several methods for converting a
     39  * {@code double} to a {@code String} and a
     40  * {@code String} to a {@code double}, as well as other
     41  * constants and methods useful when dealing with a
     42  * {@code double}.
     43  *
     44  * @author  Lee Boynton
     45  * @author  Arthur van Hoff
     46  * @author  Joseph D. Darcy
     47  * @since JDK1.0
     48  */
     49 public final class Double extends Number implements Comparable<Double> {
     50     /**
     51      * A constant holding the positive infinity of type
     52      * {@code double}. It is equal to the value returned by
     53      * {@code Double.longBitsToDouble(0x7ff0000000000000L)}.
     54      */
     55     public static final double POSITIVE_INFINITY = 1.0 / 0.0;
     56 
     57     /**
     58      * A constant holding the negative infinity of type
     59      * {@code double}. It is equal to the value returned by
     60      * {@code Double.longBitsToDouble(0xfff0000000000000L)}.
     61      */
     62     public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
     63 
     64     /**
     65      * A constant holding a Not-a-Number (NaN) value of type
     66      * {@code double}. It is equivalent to the value returned by
     67      * {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
     68      */
     69     public static final double NaN = 0.0d / 0.0;
     70 
     71     /**
     72      * A constant holding the largest positive finite value of type
     73      * {@code double},
     74      * (2-2<sup>-52</sup>)&middot;2<sup>1023</sup>.  It is equal to
     75      * the hexadecimal floating-point literal
     76      * {@code 0x1.fffffffffffffP+1023} and also equal to
     77      * {@code Double.longBitsToDouble(0x7fefffffffffffffL)}.
     78      */
     79     public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308
     80 
     81     /**
     82      * A constant holding the smallest positive normal value of type
     83      * {@code double}, 2<sup>-1022</sup>.  It is equal to the
     84      * hexadecimal floating-point literal {@code 0x1.0p-1022} and also
     85      * equal to {@code Double.longBitsToDouble(0x0010000000000000L)}.
     86      *
     87      * @since 1.6
     88      */
     89     public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308
     90 
     91     /**
     92      * A constant holding the smallest positive nonzero value of type
     93      * {@code double}, 2<sup>-1074</sup>. It is equal to the
     94      * hexadecimal floating-point literal
     95      * {@code 0x0.0000000000001P-1022} and also equal to
     96      * {@code Double.longBitsToDouble(0x1L)}.
     97      */
     98     public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
     99 
    100     /**
    101      * Maximum exponent a finite {@code double} variable may have.
    102      * It is equal to the value returned by
    103      * {@code Math.getExponent(Double.MAX_VALUE)}.
    104      *
    105      * @since 1.6
    106      */
    107     public static final int MAX_EXPONENT = 1023;
    108 
    109     /**
    110      * Minimum exponent a normalized {@code double} variable may
    111      * have.  It is equal to the value returned by
    112      * {@code Math.getExponent(Double.MIN_NORMAL)}.
    113      *
    114      * @since 1.6
    115      */
    116     public static final int MIN_EXPONENT = -1022;
    117 
    118     /**
    119      * The number of bits used to represent a {@code double} value.
    120      *
    121      * @since 1.5
    122      */
    123     public static final int SIZE = 64;
    124 
    125     /**
    126      * The number of bytes used to represent a {@code double} value.
    127      *
    128      * @since 1.8
    129      */
    130     public static final int BYTES = SIZE / Byte.SIZE;
    131 
    132     /**
    133      * The {@code Class} instance representing the primitive type
    134      * {@code double}.
    135      *
    136      * @since JDK1.1
    137      */
    138     @SuppressWarnings("unchecked")
    139     public static final Class<Double>   TYPE = (Class<Double>) Class.getPrimitiveClass("double");
    140 
    141     /**
    142      * Returns a string representation of the {@code double}
    143      * argument. All characters mentioned below are ASCII characters.
    144      * <ul>
    145      * <li>If the argument is NaN, the result is the string
    146      *     "{@code NaN}".
    147      * <li>Otherwise, the result is a string that represents the sign and
    148      * magnitude (absolute value) of the argument. If the sign is negative,
    149      * the first character of the result is '{@code -}'
    150      * ({@code '\u005Cu002D'}); if the sign is positive, no sign character
    151      * appears in the result. As for the magnitude <i>m</i>:
    152      * <ul>
    153      * <li>If <i>m</i> is infinity, it is represented by the characters
    154      * {@code "Infinity"}; thus, positive infinity produces the result
    155      * {@code "Infinity"} and negative infinity produces the result
    156      * {@code "-Infinity"}.
    157      *
    158      * <li>If <i>m</i> is zero, it is represented by the characters
    159      * {@code "0.0"}; thus, negative zero produces the result
    160      * {@code "-0.0"} and positive zero produces the result
    161      * {@code "0.0"}.
    162      *
    163      * <li>If <i>m</i> is greater than or equal to 10<sup>-3</sup> but less
    164      * than 10<sup>7</sup>, then it is represented as the integer part of
    165      * <i>m</i>, in decimal form with no leading zeroes, followed by
    166      * '{@code .}' ({@code '\u005Cu002E'}), followed by one or
    167      * more decimal digits representing the fractional part of <i>m</i>.
    168      *
    169      * <li>If <i>m</i> is less than 10<sup>-3</sup> or greater than or
    170      * equal to 10<sup>7</sup>, then it is represented in so-called
    171      * "computerized scientific notation." Let <i>n</i> be the unique
    172      * integer such that 10<sup><i>n</i></sup> &le; <i>m</i> {@literal <}
    173      * 10<sup><i>n</i>+1</sup>; then let <i>a</i> be the
    174      * mathematically exact quotient of <i>m</i> and
    175      * 10<sup><i>n</i></sup> so that 1 &le; <i>a</i> {@literal <} 10. The
    176      * magnitude is then represented as the integer part of <i>a</i>,
    177      * as a single decimal digit, followed by '{@code .}'
    178      * ({@code '\u005Cu002E'}), followed by decimal digits
    179      * representing the fractional part of <i>a</i>, followed by the
    180      * letter '{@code E}' ({@code '\u005Cu0045'}), followed
    181      * by a representation of <i>n</i> as a decimal integer, as
    182      * produced by the method {@link Integer#toString(int)}.
    183      * </ul>
    184      * </ul>
    185      * How many digits must be printed for the fractional part of
    186      * <i>m</i> or <i>a</i>? There must be at least one digit to represent
    187      * the fractional part, and beyond that as many, but only as many, more
    188      * digits as are needed to uniquely distinguish the argument value from
    189      * adjacent values of type {@code double}. That is, suppose that
    190      * <i>x</i> is the exact mathematical value represented by the decimal
    191      * representation produced by this method for a finite nonzero argument
    192      * <i>d</i>. Then <i>d</i> must be the {@code double} value nearest
    193      * to <i>x</i>; or if two {@code double} values are equally close
    194      * to <i>x</i>, then <i>d</i> must be one of them and the least
    195      * significant bit of the significand of <i>d</i> must be {@code 0}.
    196      *
    197      * <p>To create localized string representations of a floating-point
    198      * value, use subclasses of {@link java.text.NumberFormat}.
    199      *
    200      * @param   d   the {@code double} to be converted.
    201      * @return a string representation of the argument.
    202      */
    203     public static String toString(double d) {
    204         return FloatingDecimal.toJavaFormatString(d);
    205     }
    206 
    207     /**
    208      * Returns a hexadecimal string representation of the
    209      * {@code double} argument. All characters mentioned below
    210      * are ASCII characters.
    211      *
    212      * <ul>
    213      * <li>If the argument is NaN, the result is the string
    214      *     "{@code NaN}".
    215      * <li>Otherwise, the result is a string that represents the sign
    216      * and magnitude of the argument. If the sign is negative, the
    217      * first character of the result is '{@code -}'
    218      * ({@code '\u005Cu002D'}); if the sign is positive, no sign
    219      * character appears in the result. As for the magnitude <i>m</i>:
    220      *
    221      * <ul>
    222      * <li>If <i>m</i> is infinity, it is represented by the string
    223      * {@code "Infinity"}; thus, positive infinity produces the
    224      * result {@code "Infinity"} and negative infinity produces
    225      * the result {@code "-Infinity"}.
    226      *
    227      * <li>If <i>m</i> is zero, it is represented by the string
    228      * {@code "0x0.0p0"}; thus, negative zero produces the result
    229      * {@code "-0x0.0p0"} and positive zero produces the result
    230      * {@code "0x0.0p0"}.
    231      *
    232      * <li>If <i>m</i> is a {@code double} value with a
    233      * normalized representation, substrings are used to represent the
    234      * significand and exponent fields.  The significand is
    235      * represented by the characters {@code "0x1."}
    236      * followed by a lowercase hexadecimal representation of the rest
    237      * of the significand as a fraction.  Trailing zeros in the
    238      * hexadecimal representation are removed unless all the digits
    239      * are zero, in which case a single zero is used. Next, the
    240      * exponent is represented by {@code "p"} followed
    241      * by a decimal string of the unbiased exponent as if produced by
    242      * a call to {@link Integer#toString(int) Integer.toString} on the
    243      * exponent value.
    244      *
    245      * <li>If <i>m</i> is a {@code double} value with a subnormal
    246      * representation, the significand is represented by the
    247      * characters {@code "0x0."} followed by a
    248      * hexadecimal representation of the rest of the significand as a
    249      * fraction.  Trailing zeros in the hexadecimal representation are
    250      * removed. Next, the exponent is represented by
    251      * {@code "p-1022"}.  Note that there must be at
    252      * least one nonzero digit in a subnormal significand.
    253      *
    254      * </ul>
    255      *
    256      * </ul>
    257      *
    258      * <table border>
    259      * <caption>Examples</caption>
    260      * <tr><th>Floating-point Value</th><th>Hexadecimal String</th>
    261      * <tr><td>{@code 1.0}</td> <td>{@code 0x1.0p0}</td>
    262      * <tr><td>{@code -1.0}</td>        <td>{@code -0x1.0p0}</td>
    263      * <tr><td>{@code 2.0}</td> <td>{@code 0x1.0p1}</td>
    264      * <tr><td>{@code 3.0}</td> <td>{@code 0x1.8p1}</td>
    265      * <tr><td>{@code 0.5}</td> <td>{@code 0x1.0p-1}</td>
    266      * <tr><td>{@code 0.25}</td>        <td>{@code 0x1.0p-2}</td>
    267      * <tr><td>{@code Double.MAX_VALUE}</td>
    268      *     <td>{@code 0x1.fffffffffffffp1023}</td>
    269      * <tr><td>{@code Minimum Normal Value}</td>
    270      *     <td>{@code 0x1.0p-1022}</td>
    271      * <tr><td>{@code Maximum Subnormal Value}</td>
    272      *     <td>{@code 0x0.fffffffffffffp-1022}</td>
    273      * <tr><td>{@code Double.MIN_VALUE}</td>
    274      *     <td>{@code 0x0.0000000000001p-1022}</td>
    275      * </table>
    276      * @param   d   the {@code double} to be converted.
    277      * @return a hex string representation of the argument.
    278      * @since 1.5
    279      * @author Joseph D. Darcy
    280      */
    281     public static String toHexString(double d) {
    282         /*
    283          * Modeled after the "a" conversion specifier in C99, section
    284          * 7.19.6.1; however, the output of this method is more
    285          * tightly specified.
    286          */
    287         if (!isFinite(d) )
    288             // For infinity and NaN, use the decimal output.
    289             return Double.toString(d);
    290         else {
    291             // Initialized to maximum size of output.
    292             StringBuilder answer = new StringBuilder(24);
    293 
    294             if (Math.copySign(1.0, d) == -1.0)    // value is negative,
    295                 answer.append("-");                  // so append sign info
    296 
    297             answer.append("0x");
    298 
    299             d = Math.abs(d);
    300 
    301             if(d == 0.0) {
    302                 answer.append("0.0p0");
    303             } else {
    304                 boolean subnormal = (d < DoubleConsts.MIN_NORMAL);
    305 
    306                 // Isolate significand bits and OR in a high-order bit
    307                 // so that the string representation has a known
    308                 // length.
    309                 long signifBits = (Double.doubleToLongBits(d)
    310                                    & DoubleConsts.SIGNIF_BIT_MASK) |
    311                     0x1000000000000000L;
    312 
    313                 // Subnormal values have a 0 implicit bit; normal
    314                 // values have a 1 implicit bit.
    315                 answer.append(subnormal ? "0." : "1.");
    316 
    317                 // Isolate the low-order 13 digits of the hex
    318                 // representation.  If all the digits are zero,
    319                 // replace with a single 0; otherwise, remove all
    320                 // trailing zeros.
    321                 String signif = Long.toHexString(signifBits).substring(3,16);
    322                 answer.append(signif.equals("0000000000000") ? // 13 zeros
    323                               "0":
    324                               signif.replaceFirst("0{1,12}$", ""));
    325 
    326                 answer.append('p');
    327                 // If the value is subnormal, use the E_min exponent
    328                 // value for double; otherwise, extract and report d's
    329                 // exponent (the representation of a subnormal uses
    330                 // E_min -1).
    331                 answer.append(subnormal ?
    332                               DoubleConsts.MIN_EXPONENT:
    333                               Math.getExponent(d));
    334             }
    335             return answer.toString();
    336         }
    337     }
    338 
    339     /**
    340      * Returns a {@code Double} object holding the
    341      * {@code double} value represented by the argument string
    342      * {@code s}.
    343      *
    344      * <p>If {@code s} is {@code null}, then a
    345      * {@code NullPointerException} is thrown.
    346      *
    347      * <p>Leading and trailing whitespace characters in {@code s}
    348      * are ignored.  Whitespace is removed as if by the {@link
    349      * String#trim} method; that is, both ASCII space and control
    350      * characters are removed. The rest of {@code s} should
    351      * constitute a <i>FloatValue</i> as described by the lexical
    352      * syntax rules:
    353      *
    354      * <blockquote>
    355      * <dl>
    356      * <dt><i>FloatValue:</i>
    357      * <dd><i>Sign<sub>opt</sub></i> {@code NaN}
    358      * <dd><i>Sign<sub>opt</sub></i> {@code Infinity}
    359      * <dd><i>Sign<sub>opt</sub> FloatingPointLiteral</i>
    360      * <dd><i>Sign<sub>opt</sub> HexFloatingPointLiteral</i>
    361      * <dd><i>SignedInteger</i>
    362      * </dl>
    363      *
    364      * <dl>
    365      * <dt><i>HexFloatingPointLiteral</i>:
    366      * <dd> <i>HexSignificand BinaryExponent FloatTypeSuffix<sub>opt</sub></i>
    367      * </dl>
    368      *
    369      * <dl>
    370      * <dt><i>HexSignificand:</i>
    371      * <dd><i>HexNumeral</i>
    372      * <dd><i>HexNumeral</i> {@code .}
    373      * <dd>{@code 0x} <i>HexDigits<sub>opt</sub>
    374      *     </i>{@code .}<i> HexDigits</i>
    375      * <dd>{@code 0X}<i> HexDigits<sub>opt</sub>
    376      *     </i>{@code .} <i>HexDigits</i>
    377      * </dl>
    378      *
    379      * <dl>
    380      * <dt><i>BinaryExponent:</i>
    381      * <dd><i>BinaryExponentIndicator SignedInteger</i>
    382      * </dl>
    383      *
    384      * <dl>
    385      * <dt><i>BinaryExponentIndicator:</i>
    386      * <dd>{@code p}
    387      * <dd>{@code P}
    388      * </dl>
    389      *
    390      * </blockquote>
    391      *
    392      * where <i>Sign</i>, <i>FloatingPointLiteral</i>,
    393      * <i>HexNumeral</i>, <i>HexDigits</i>, <i>SignedInteger</i> and
    394      * <i>FloatTypeSuffix</i> are as defined in the lexical structure
    395      * sections of
    396      * <cite>The Java&trade; Language Specification</cite>,
    397      * except that underscores are not accepted between digits.
    398      * If {@code s} does not have the form of
    399      * a <i>FloatValue</i>, then a {@code NumberFormatException}
    400      * is thrown. Otherwise, {@code s} is regarded as
    401      * representing an exact decimal value in the usual
    402      * "computerized scientific notation" or as an exact
    403      * hexadecimal value; this exact numerical value is then
    404      * conceptually converted to an "infinitely precise"
    405      * binary value that is then rounded to type {@code double}
    406      * by the usual round-to-nearest rule of IEEE 754 floating-point
    407      * arithmetic, which includes preserving the sign of a zero
    408      * value.
    409      *
    410      * Note that the round-to-nearest rule also implies overflow and
    411      * underflow behaviour; if the exact value of {@code s} is large
    412      * enough in magnitude (greater than or equal to ({@link
    413      * #MAX_VALUE} + {@link Math#ulp(double) ulp(MAX_VALUE)}/2),
    414      * rounding to {@code double} will result in an infinity and if the
    415      * exact value of {@code s} is small enough in magnitude (less
    416      * than or equal to {@link #MIN_VALUE}/2), rounding to float will
    417      * result in a zero.
    418      *
    419      * Finally, after rounding a {@code Double} object representing
    420      * this {@code double} value is returned.
    421      *
    422      * <p> To interpret localized string representations of a
    423      * floating-point value, use subclasses of {@link
    424      * java.text.NumberFormat}.
    425      *
    426      * <p>Note that trailing format specifiers, specifiers that
    427      * determine the type of a floating-point literal
    428      * ({@code 1.0f} is a {@code float} value;
    429      * {@code 1.0d} is a {@code double} value), do
    430      * <em>not</em> influence the results of this method.  In other
    431      * words, the numerical value of the input string is converted
    432      * directly to the target floating-point type.  The two-step
    433      * sequence of conversions, string to {@code float} followed
    434      * by {@code float} to {@code double}, is <em>not</em>
    435      * equivalent to converting a string directly to
    436      * {@code double}. For example, the {@code float}
    437      * literal {@code 0.1f} is equal to the {@code double}
    438      * value {@code 0.10000000149011612}; the {@code float}
    439      * literal {@code 0.1f} represents a different numerical
    440      * value than the {@code double} literal
    441      * {@code 0.1}. (The numerical value 0.1 cannot be exactly
    442      * represented in a binary floating-point number.)
    443      *
    444      * <p>To avoid calling this method on an invalid string and having
    445      * a {@code NumberFormatException} be thrown, the regular
    446      * expression below can be used to screen the input string:
    447      *
    448      * <pre>{@code
    449      *  final String Digits     = "(\\p{Digit}+)";
    450      *  final String HexDigits  = "(\\p{XDigit}+)";
    451      *  // an exponent is 'e' or 'E' followed by an optionally
    452      *  // signed decimal integer.
    453      *  final String Exp        = "[eE][+-]?"+Digits;
    454      *  final String fpRegex    =
    455      *      ("[\\x00-\\x20]*"+  // Optional leading "whitespace"
    456      *       "[+-]?(" + // Optional sign character
    457      *       "NaN|" +           // "NaN" string
    458      *       "Infinity|" +      // "Infinity" string
    459      *
    460      *       // A decimal floating-point string representing a finite positive
    461      *       // number without a leading sign has at most five basic pieces:
    462      *       // Digits . Digits ExponentPart FloatTypeSuffix
    463      *       //
    464      *       // Since this method allows integer-only strings as input
    465      *       // in addition to strings of floating-point literals, the
    466      *       // two sub-patterns below are simplifications of the grammar
    467      *       // productions from section 3.10.2 of
    468      *       // The Java Language Specification.
    469      *
    470      *       // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
    471      *       "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+
    472      *
    473      *       // . Digits ExponentPart_opt FloatTypeSuffix_opt
    474      *       "(\\.("+Digits+")("+Exp+")?)|"+
    475      *
    476      *       // Hexadecimal strings
    477      *       "((" +
    478      *        // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
    479      *        "(0[xX]" + HexDigits + "(\\.)?)|" +
    480      *
    481      *        // 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt
    482      *        "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +
    483      *
    484      *        ")[pP][+-]?" + Digits + "))" +
    485      *       "[fFdD]?))" +
    486      *       "[\\x00-\\x20]*");// Optional trailing "whitespace"
    487      *
    488      *  if (Pattern.matches(fpRegex, myString))
    489      *      Double.valueOf(myString); // Will not throw NumberFormatException
    490      *  else {
    491      *      // Perform suitable alternative action
    492      *  }
    493      * }</pre>
    494      *
    495      * @param      s   the string to be parsed.
    496      * @return     a {@code Double} object holding the value
    497      *             represented by the {@code String} argument.
    498      * @throws     NumberFormatException  if the string does not contain a
    499      *             parsable number.
    500      */
    501     public static Double valueOf(String s) throws NumberFormatException {
    502         return new Double(parseDouble(s));
    503     }
    504 
    505     /**
    506      * Returns a {@code Double} instance representing the specified
    507      * {@code double} value.
    508      * If a new {@code Double} instance is not required, this method
    509      * should generally be used in preference to the constructor
    510      * {@link #Double(double)}, as this method is likely to yield
    511      * significantly better space and time performance by caching
    512      * frequently requested values.
    513      *
    514      * @param  d a double value.
    515      * @return a {@code Double} instance representing {@code d}.
    516      * @since  1.5
    517      */
    518     public static Double valueOf(double d) {
    519         return new Double(d);
    520     }
    521 
    522     /**
    523      * Returns a new {@code double} initialized to the value
    524      * represented by the specified {@code String}, as performed
    525      * by the {@code valueOf} method of class
    526      * {@code Double}.
    527      *
    528      * @param  s   the string to be parsed.
    529      * @return the {@code double} value represented by the string
    530      *         argument.
    531      * @throws NullPointerException  if the string is null
    532      * @throws NumberFormatException if the string does not contain
    533      *         a parsable {@code double}.
    534      * @see    java.lang.Double#valueOf(String)
    535      * @since 1.2
    536      */
    537     public static double parseDouble(String s) throws NumberFormatException {
    538         return FloatingDecimal.parseDouble(s);
    539     }
    540 
    541     /**
    542      * Returns {@code true} if the specified number is a
    543      * Not-a-Number (NaN) value, {@code false} otherwise.
    544      *
    545      * @param   v   the value to be tested.
    546      * @return  {@code true} if the value of the argument is NaN;
    547      *          {@code false} otherwise.
    548      */
    549     public static boolean isNaN(double v) {
    550         return (v != v);
    551     }
    552 
    553     /**
    554      * Returns {@code true} if the specified number is infinitely
    555      * large in magnitude, {@code false} otherwise.
    556      *
    557      * @param   v   the value to be tested.
    558      * @return  {@code true} if the value of the argument is positive
    559      *          infinity or negative infinity; {@code false} otherwise.
    560      */
    561     public static boolean isInfinite(double v) {
    562         return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
    563     }
    564 
    565     /**
    566      * Returns {@code true} if the argument is a finite floating-point
    567      * value; returns {@code false} otherwise (for NaN and infinity
    568      * arguments).
    569      *
    570      * @param d the {@code double} value to be tested
    571      * @return {@code true} if the argument is a finite
    572      * floating-point value, {@code false} otherwise.
    573      * @since 1.8
    574      */
    575     public static boolean isFinite(double d) {
    576         return Math.abs(d) <= DoubleConsts.MAX_VALUE;
    577     }
    578 
    579     /**
    580      * The value of the Double.
    581      *
    582      * @serial
    583      */
    584     private final double value;
    585 
    586     /**
    587      * Constructs a newly allocated {@code Double} object that
    588      * represents the primitive {@code double} argument.
    589      *
    590      * @param   value   the value to be represented by the {@code Double}.
    591      */
    592     public Double(double value) {
    593         this.value = value;
    594     }
    595 
    596     /**
    597      * Constructs a newly allocated {@code Double} object that
    598      * represents the floating-point value of type {@code double}
    599      * represented by the string. The string is converted to a
    600      * {@code double} value as if by the {@code valueOf} method.
    601      *
    602      * @param  s  a string to be converted to a {@code Double}.
    603      * @throws    NumberFormatException  if the string does not contain a
    604      *            parsable number.
    605      * @see       java.lang.Double#valueOf(java.lang.String)
    606      */
    607     public Double(String s) throws NumberFormatException {
    608         value = parseDouble(s);
    609     }
    610 
    611     /**
    612      * Returns {@code true} if this {@code Double} value is
    613      * a Not-a-Number (NaN), {@code false} otherwise.
    614      *
    615      * @return  {@code true} if the value represented by this object is
    616      *          NaN; {@code false} otherwise.
    617      */
    618     public boolean isNaN() {
    619         return isNaN(value);
    620     }
    621 
    622     /**
    623      * Returns {@code true} if this {@code Double} value is
    624      * infinitely large in magnitude, {@code false} otherwise.
    625      *
    626      * @return  {@code true} if the value represented by this object is
    627      *          positive infinity or negative infinity;
    628      *          {@code false} otherwise.
    629      */
    630     public boolean isInfinite() {
    631         return isInfinite(value);
    632     }
    633 
    634     /**
    635      * Returns a string representation of this {@code Double} object.
    636      * The primitive {@code double} value represented by this
    637      * object is converted to a string exactly as if by the method
    638      * {@code toString} of one argument.
    639      *
    640      * @return  a {@code String} representation of this object.
    641      * @see java.lang.Double#toString(double)
    642      */
    643     public String toString() {
    644         return toString(value);
    645     }
    646 
    647     /**
    648      * Returns the value of this {@code Double} as a {@code byte}
    649      * after a narrowing primitive conversion.
    650      *
    651      * @return  the {@code double} value represented by this object
    652      *          converted to type {@code byte}
    653      * @jls 5.1.3 Narrowing Primitive Conversions
    654      * @since JDK1.1
    655      */
    656     public byte byteValue() {
    657         return (byte)value;
    658     }
    659 
    660     /**
    661      * Returns the value of this {@code Double} as a {@code short}
    662      * after a narrowing primitive conversion.
    663      *
    664      * @return  the {@code double} value represented by this object
    665      *          converted to type {@code short}
    666      * @jls 5.1.3 Narrowing Primitive Conversions
    667      * @since JDK1.1
    668      */
    669     public short shortValue() {
    670         return (short)value;
    671     }
    672 
    673     /**
    674      * Returns the value of this {@code Double} as an {@code int}
    675      * after a narrowing primitive conversion.
    676      * @jls 5.1.3 Narrowing Primitive Conversions
    677      *
    678      * @return  the {@code double} value represented by this object
    679      *          converted to type {@code int}
    680      */
    681     public int intValue() {
    682         return (int)value;
    683     }
    684 
    685     /**
    686      * Returns the value of this {@code Double} as a {@code long}
    687      * after a narrowing primitive conversion.
    688      *
    689      * @return  the {@code double} value represented by this object
    690      *          converted to type {@code long}
    691      * @jls 5.1.3 Narrowing Primitive Conversions
    692      */
    693     public long longValue() {
    694         return (long)value;
    695     }
    696 
    697     /**
    698      * Returns the value of this {@code Double} as a {@code float}
    699      * after a narrowing primitive conversion.
    700      *
    701      * @return  the {@code double} value represented by this object
    702      *          converted to type {@code float}
    703      * @jls 5.1.3 Narrowing Primitive Conversions
    704      * @since JDK1.0
    705      */
    706     public float floatValue() {
    707         return (float)value;
    708     }
    709 
    710     /**
    711      * Returns the {@code double} value of this {@code Double} object.
    712      *
    713      * @return the {@code double} value represented by this object
    714      */
    715     public double doubleValue() {
    716         return value;
    717     }
    718 
    719     /**
    720      * Returns a hash code for this {@code Double} object. The
    721      * result is the exclusive OR of the two halves of the
    722      * {@code long} integer bit representation, exactly as
    723      * produced by the method {@link #doubleToLongBits(double)}, of
    724      * the primitive {@code double} value represented by this
    725      * {@code Double} object. That is, the hash code is the value
    726      * of the expression:
    727      *
    728      * <blockquote>
    729      *  {@code (int)(v^(v>>>32))}
    730      * </blockquote>
    731      *
    732      * where {@code v} is defined by:
    733      *
    734      * <blockquote>
    735      *  {@code long v = Double.doubleToLongBits(this.doubleValue());}
    736      * </blockquote>
    737      *
    738      * @return  a {@code hash code} value for this object.
    739      */
    740     @Override
    741     public int hashCode() {
    742         return Double.hashCode(value);
    743     }
    744 
    745     /**
    746      * Returns a hash code for a {@code double} value; compatible with
    747      * {@code Double.hashCode()}.
    748      *
    749      * @param value the value to hash
    750      * @return a hash code value for a {@code double} value.
    751      * @since 1.8
    752      */
    753     public static int hashCode(double value) {
    754         long bits = doubleToLongBits(value);
    755         return (int)(bits ^ (bits >>> 32));
    756     }
    757 
    758     /**
    759      * Compares this object against the specified object.  The result
    760      * is {@code true} if and only if the argument is not
    761      * {@code null} and is a {@code Double} object that
    762      * represents a {@code double} that has the same value as the
    763      * {@code double} represented by this object. For this
    764      * purpose, two {@code double} values are considered to be
    765      * the same if and only if the method {@link
    766      * #doubleToLongBits(double)} returns the identical
    767      * {@code long} value when applied to each.
    768      *
    769      * <p>Note that in most cases, for two instances of class
    770      * {@code Double}, {@code d1} and {@code d2}, the
    771      * value of {@code d1.equals(d2)} is {@code true} if and
    772      * only if
    773      *
    774      * <blockquote>
    775      *  {@code d1.doubleValue() == d2.doubleValue()}
    776      * </blockquote>
    777      *
    778      * <p>also has the value {@code true}. However, there are two
    779      * exceptions:
    780      * <ul>
    781      * <li>If {@code d1} and {@code d2} both represent
    782      *     {@code Double.NaN}, then the {@code equals} method
    783      *     returns {@code true}, even though
    784      *     {@code Double.NaN==Double.NaN} has the value
    785      *     {@code false}.
    786      * <li>If {@code d1} represents {@code +0.0} while
    787      *     {@code d2} represents {@code -0.0}, or vice versa,
    788      *     the {@code equal} test has the value {@code false},
    789      *     even though {@code +0.0==-0.0} has the value {@code true}.
    790      * </ul>
    791      * This definition allows hash tables to operate properly.
    792      * @param   obj   the object to compare with.
    793      * @return  {@code true} if the objects are the same;
    794      *          {@code false} otherwise.
    795      * @see java.lang.Double#doubleToLongBits(double)
    796      */
    797     public boolean equals(Object obj) {
    798         return (obj instanceof Double)
    799                && (doubleToLongBits(((Double)obj).value) ==
    800                       doubleToLongBits(value));
    801     }
    802 
    803     /**
    804      * Returns a representation of the specified floating-point value
    805      * according to the IEEE 754 floating-point "double
    806      * format" bit layout.
    807      *
    808      * <p>Bit 63 (the bit that is selected by the mask
    809      * {@code 0x8000000000000000L}) represents the sign of the
    810      * floating-point number. Bits
    811      * 62-52 (the bits that are selected by the mask
    812      * {@code 0x7ff0000000000000L}) represent the exponent. Bits 51-0
    813      * (the bits that are selected by the mask
    814      * {@code 0x000fffffffffffffL}) represent the significand
    815      * (sometimes called the mantissa) of the floating-point number.
    816      *
    817      * <p>If the argument is positive infinity, the result is
    818      * {@code 0x7ff0000000000000L}.
    819      *
    820      * <p>If the argument is negative infinity, the result is
    821      * {@code 0xfff0000000000000L}.
    822      *
    823      * <p>If the argument is NaN, the result is
    824      * {@code 0x7ff8000000000000L}.
    825      *
    826      * <p>In all cases, the result is a {@code long} integer that, when
    827      * given to the {@link #longBitsToDouble(long)} method, will produce a
    828      * floating-point value the same as the argument to
    829      * {@code doubleToLongBits} (except all NaN values are
    830      * collapsed to a single "canonical" NaN value).
    831      *
    832      * @param   value   a {@code double} precision floating-point number.
    833      * @return the bits that represent the floating-point number.
    834      */
    835     public static long doubleToLongBits(double value) {
    836         long result = doubleToRawLongBits(value);
    837         // Check for NaN based on values of bit fields, maximum
    838         // exponent and nonzero significand.
    839         if ( ((result & DoubleConsts.EXP_BIT_MASK) ==
    840               DoubleConsts.EXP_BIT_MASK) &&
    841              (result & DoubleConsts.SIGNIF_BIT_MASK) != 0L)
    842             result = 0x7ff8000000000000L;
    843         return result;
    844     }
    845 
    846     /**
    847      * Returns a representation of the specified floating-point value
    848      * according to the IEEE 754 floating-point "double
    849      * format" bit layout, preserving Not-a-Number (NaN) values.
    850      *
    851      * <p>Bit 63 (the bit that is selected by the mask
    852      * {@code 0x8000000000000000L}) represents the sign of the
    853      * floating-point number. Bits
    854      * 62-52 (the bits that are selected by the mask
    855      * {@code 0x7ff0000000000000L}) represent the exponent. Bits 51-0
    856      * (the bits that are selected by the mask
    857      * {@code 0x000fffffffffffffL}) represent the significand
    858      * (sometimes called the mantissa) of the floating-point number.
    859      *
    860      * <p>If the argument is positive infinity, the result is
    861      * {@code 0x7ff0000000000000L}.
    862      *
    863      * <p>If the argument is negative infinity, the result is
    864      * {@code 0xfff0000000000000L}.
    865      *
    866      * <p>If the argument is NaN, the result is the {@code long}
    867      * integer representing the actual NaN value.  Unlike the
    868      * {@code doubleToLongBits} method,
    869      * {@code doubleToRawLongBits} does not collapse all the bit
    870      * patterns encoding a NaN to a single "canonical" NaN
    871      * value.
    872      *
    873      * <p>In all cases, the result is a {@code long} integer that,
    874      * when given to the {@link #longBitsToDouble(long)} method, will
    875      * produce a floating-point value the same as the argument to
    876      * {@code doubleToRawLongBits}.
    877      *
    878      * @param   value   a {@code double} precision floating-point number.
    879      * @return the bits that represent the floating-point number.
    880      * @since 1.3
    881      */
    882     public static native long doubleToRawLongBits(double value);
    883 
    884     /**
    885      * Returns the {@code double} value corresponding to a given
    886      * bit representation.
    887      * The argument is considered to be a representation of a
    888      * floating-point value according to the IEEE 754 floating-point
    889      * "double format" bit layout.
    890      *
    891      * <p>If the argument is {@code 0x7ff0000000000000L}, the result
    892      * is positive infinity.
    893      *
    894      * <p>If the argument is {@code 0xfff0000000000000L}, the result
    895      * is negative infinity.
    896      *
    897      * <p>If the argument is any value in the range
    898      * {@code 0x7ff0000000000001L} through
    899      * {@code 0x7fffffffffffffffL} or in the range
    900      * {@code 0xfff0000000000001L} through
    901      * {@code 0xffffffffffffffffL}, the result is a NaN.  No IEEE
    902      * 754 floating-point operation provided by Java can distinguish
    903      * between two NaN values of the same type with different bit
    904      * patterns.  Distinct values of NaN are only distinguishable by
    905      * use of the {@code Double.doubleToRawLongBits} method.
    906      *
    907      * <p>In all other cases, let <i>s</i>, <i>e</i>, and <i>m</i> be three
    908      * values that can be computed from the argument:
    909      *
    910      * <blockquote><pre>{@code
    911      * int s = ((bits >> 63) == 0) ? 1 : -1;
    912      * int e = (int)((bits >> 52) & 0x7ffL);
    913      * long m = (e == 0) ?
    914      *                 (bits & 0xfffffffffffffL) << 1 :
    915      *                 (bits & 0xfffffffffffffL) | 0x10000000000000L;
    916      * }</pre></blockquote>
    917      *
    918      * Then the floating-point result equals the value of the mathematical
    919      * expression <i>s</i>&middot;<i>m</i>&middot;2<sup><i>e</i>-1075</sup>.
    920      *
    921      * <p>Note that this method may not be able to return a
    922      * {@code double} NaN with exactly same bit pattern as the
    923      * {@code long} argument.  IEEE 754 distinguishes between two
    924      * kinds of NaNs, quiet NaNs and <i>signaling NaNs</i>.  The
    925      * differences between the two kinds of NaN are generally not
    926      * visible in Java.  Arithmetic operations on signaling NaNs turn
    927      * them into quiet NaNs with a different, but often similar, bit
    928      * pattern.  However, on some processors merely copying a
    929      * signaling NaN also performs that conversion.  In particular,
    930      * copying a signaling NaN to return it to the calling method
    931      * may perform this conversion.  So {@code longBitsToDouble}
    932      * may not be able to return a {@code double} with a
    933      * signaling NaN bit pattern.  Consequently, for some
    934      * {@code long} values,
    935      * {@code doubleToRawLongBits(longBitsToDouble(start))} may
    936      * <i>not</i> equal {@code start}.  Moreover, which
    937      * particular bit patterns represent signaling NaNs is platform
    938      * dependent; although all NaN bit patterns, quiet or signaling,
    939      * must be in the NaN range identified above.
    940      *
    941      * @param   bits   any {@code long} integer.
    942      * @return  the {@code double} floating-point value with the same
    943      *          bit pattern.
    944      */
    945     public static native double longBitsToDouble(long bits);
    946 
    947     /**
    948      * Compares two {@code Double} objects numerically.  There
    949      * are two ways in which comparisons performed by this method
    950      * differ from those performed by the Java language numerical
    951      * comparison operators ({@code <, <=, ==, >=, >})
    952      * when applied to primitive {@code double} values:
    953      * <ul><li>
    954      *          {@code Double.NaN} is considered by this method
    955      *          to be equal to itself and greater than all other
    956      *          {@code double} values (including
    957      *          {@code Double.POSITIVE_INFINITY}).
    958      * <li>
    959      *          {@code 0.0d} is considered by this method to be greater
    960      *          than {@code -0.0d}.
    961      * </ul>
    962      * This ensures that the <i>natural ordering</i> of
    963      * {@code Double} objects imposed by this method is <i>consistent
    964      * with equals</i>.
    965      *
    966      * @param   anotherDouble   the {@code Double} to be compared.
    967      * @return  the value {@code 0} if {@code anotherDouble} is
    968      *          numerically equal to this {@code Double}; a value
    969      *          less than {@code 0} if this {@code Double}
    970      *          is numerically less than {@code anotherDouble};
    971      *          and a value greater than {@code 0} if this
    972      *          {@code Double} is numerically greater than
    973      *          {@code anotherDouble}.
    974      *
    975      * @since   1.2
    976      */
    977     public int compareTo(Double anotherDouble) {
    978         return Double.compare(value, anotherDouble.value);
    979     }
    980 
    981     /**
    982      * Compares the two specified {@code double} values. The sign
    983      * of the integer value returned is the same as that of the
    984      * integer that would be returned by the call:
    985      * <pre>
    986      *    new Double(d1).compareTo(new Double(d2))
    987      * </pre>
    988      *
    989      * @param   d1        the first {@code double} to compare
    990      * @param   d2        the second {@code double} to compare
    991      * @return  the value {@code 0} if {@code d1} is
    992      *          numerically equal to {@code d2}; a value less than
    993      *          {@code 0} if {@code d1} is numerically less than
    994      *          {@code d2}; and a value greater than {@code 0}
    995      *          if {@code d1} is numerically greater than
    996      *          {@code d2}.
    997      * @since 1.4
    998      */
    999     public static int compare(double d1, double d2) {
   1000         if (d1 < d2)
   1001             return -1;           // Neither val is NaN, thisVal is smaller
   1002         if (d1 > d2)
   1003             return 1;            // Neither val is NaN, thisVal is larger
   1004 
   1005         // Cannot use doubleToRawLongBits because of possibility of NaNs.
   1006         long thisBits    = Double.doubleToLongBits(d1);
   1007         long anotherBits = Double.doubleToLongBits(d2);
   1008 
   1009         return (thisBits == anotherBits ?  0 : // Values are equal
   1010                 (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
   1011                  1));                          // (0.0, -0.0) or (NaN, !NaN)
   1012     }
   1013 
   1014     /**
   1015      * Adds two {@code double} values together as per the + operator.
   1016      *
   1017      * @param a the first operand
   1018      * @param b the second operand
   1019      * @return the sum of {@code a} and {@code b}
   1020      * @jls 4.2.4 Floating-Point Operations
   1021      * @see java.util.function.BinaryOperator
   1022      * @since 1.8
   1023      */
   1024     public static double sum(double a, double b) {
   1025         return a + b;
   1026     }
   1027 
   1028     /**
   1029      * Returns the greater of two {@code double} values
   1030      * as if by calling {@link Math#max(double, double) Math.max}.
   1031      *
   1032      * @param a the first operand
   1033      * @param b the second operand
   1034      * @return the greater of {@code a} and {@code b}
   1035      * @see java.util.function.BinaryOperator
   1036      * @since 1.8
   1037      */
   1038     public static double max(double a, double b) {
   1039         return Math.max(a, b);
   1040     }
   1041 
   1042     /**
   1043      * Returns the smaller of two {@code double} values
   1044      * as if by calling {@link Math#min(double, double) Math.min}.
   1045      *
   1046      * @param a the first operand
   1047      * @param b the second operand
   1048      * @return the smaller of {@code a} and {@code b}.
   1049      * @see java.util.function.BinaryOperator
   1050      * @since 1.8
   1051      */
   1052     public static double min(double a, double b) {
   1053         return Math.min(a, b);
   1054     }
   1055 
   1056     /** use serialVersionUID from JDK 1.0.2 for interoperability */
   1057     private static final long serialVersionUID = -9172774392245257468L;
   1058 }
   1059