rt/emul/mini/src/main/java/java/lang/Double.java
brancharithmetic
changeset 778 6f8683517f1f
parent 772 d382dacfd73f
child 824 97fdbed30f8b
     1.1 --- a/rt/emul/mini/src/main/java/java/lang/Double.java	Tue Feb 26 16:54:16 2013 +0100
     1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Double.java	Wed Feb 27 16:24:42 2013 +0100
     1.3 @@ -920,6 +920,26 @@
     1.4       * @return  the {@code double} floating-point value with the same
     1.5       *          bit pattern.
     1.6       */
     1.7 +    @JavaScriptBody(args={ "bits" },
     1.8 +        body=
     1.9 +          "var hi = bits.high32();\n"
    1.10 +        + "var s = (hi & 0x80000000) === 0 ? 1 : -1;\n"
    1.11 +        + "var e = (hi >> 20) & 0x7ff;\n"
    1.12 +        + "if (e === 0x7ff) {\n"
    1.13 +        + "  if ((bits == 0) && ((hi & 0xfffff) === 0)) {\n"
    1.14 +        + "    return (s > 0) ? Number.POSITIVE_INFINITY"
    1.15 +                          + " : Number.NEGATIVE_INFINITY;\n"
    1.16 +        + "  }\n"
    1.17 +        + "  return Number.NaN;\n"
    1.18 +        + "}\n"
    1.19 +        + "var m = (hi & 0xfffff).next32(bits);\n"
    1.20 +        + "if (e === 0) {\n"
    1.21 +        + "  m = m.shl64(1);\n"
    1.22 +        + "} else {\n"
    1.23 +        + "  m.hi = m.high32() | 0x100000;\n"
    1.24 +        + "}\n"
    1.25 +        + "return s * m.toFP() * Math.pow(2.0, e - 1075);\n"
    1.26 +    )
    1.27      public static native double longBitsToDouble(long bits);
    1.28  
    1.29      /**