Returns the value of this double as a string by converting the
high and low bytes to a double using the method specified in the
JVM Specification.
long longValue = ((long) highBytes << 32) + lowBytes;
if (longValue == 0x7ff0000000000000L)
return ("CONSTANT_Double=\t" + "Positive Infinity");
if (longValue == 0xfff0000000000000L)
return ("CONSTANT_Double=\t" + "Negative Infinity");
if (((longValue >= 0x7ff0000000000001L) && (longValue <= 0x7fffffffffffffffL)) ||
((longValue >= 0xfff0000000000001L) && (longValue <= 0xffffffffffffffffL)))
return ("CONSTANT_Double=\t" + "NaN");
int s = ((longValue >> 63) == 0) ? 1 : -1;
int e = (int)((longValue >> 52) & 0x7ffL);
long m = (e == 0) ? (longValue & 0xfffffffffffffL) << 1 :
(longValue & 0xfffffffffffffL) | 0x10000000000000L;
double value = s * m * (2^(e - 1075));
return ("CONSTANT_Double=\t" + value);