final class com.google.common.math.DoubleUtils extends java.lang.Object
{
static final long SIGNIFICAND_MASK;
static final long EXPONENT_MASK;
static final long SIGN_MASK;
static final int SIGNIFICAND_BITS;
static final int EXPONENT_BIAS;
static final long IMPLICIT_BIT;
static final long ONE_BITS;
private void <init>()
{
com.google.common.math.DoubleUtils v;
v := @this: com.google.common.math.DoubleUtils;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
static double nextDown(double)
{
double v, v, v, v;
v := @parameter: double;
v = neg v;
v = staticinvoke <java.lang.Math: double nextUp(double)>(v);
v = neg v;
return v;
}
static long getSignificand(double)
{
int v, v;
long v, v, v;
boolean v;
double v;
v := @parameter: double;
v = staticinvoke <com.google.common.math.DoubleUtils: boolean isFinite(double)>(v);
staticinvoke <com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "not a normal value");
v = staticinvoke <java.lang.Math: int getExponent(double)>(v);
v = staticinvoke <java.lang.Double: long doubleToRawLongBits(double)>(v);
v = v & 4503599627370495L;
v = (int) -1023;
if v != v goto label;
v = v << 1;
goto label;
label:
v = v | 4503599627370496L;
label:
return v;
}
static boolean isFinite(double)
{
int v;
boolean v;
double v;
v := @parameter: double;
v = staticinvoke <java.lang.Math: int getExponent(double)>(v);
if v > 1023 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
static boolean isNormal(double)
{
int v, v;
boolean v;
double v;
v := @parameter: double;
v = staticinvoke <java.lang.Math: int getExponent(double)>(v);
v = (int) -1022;
if v < v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
static double scaleNormalize(double)
{
long v, v, v;
double v, v;
v := @parameter: double;
v = staticinvoke <java.lang.Double: long doubleToRawLongBits(double)>(v);
v = v & 4503599627370495L;
v = v | 4607182418800017408L;
v = staticinvoke <java.lang.Double: double longBitsToDouble(long)>(v);
return v;
}
static double bigToDouble(java.math.BigInteger)
{
long v, v, v, v, v, v, v, v, v, v, v;
byte v, v;
int v, v, v, v, v, v, v, v;
java.math.BigInteger v, v, v;
boolean v;
double v, v;
v := @parameter: java.math.BigInteger;
v = virtualinvoke v.<java.math.BigInteger: java.math.BigInteger abs()>();
v = virtualinvoke v.<java.math.BigInteger: int bitLength()>();
v = v - 1;
if v >= 63 goto label;
v = virtualinvoke v.<java.math.BigInteger: long longValue()>();
return v;
label:
if v <= 1023 goto label;
v = virtualinvoke v.<java.math.BigInteger: int signum()>();
v = v * #Infinity;
return v;
label:
v = v - 52;
v = v - 1;
v = virtualinvoke v.<java.math.BigInteger: java.math.BigInteger shiftRight(int)>(v);
v = virtualinvoke v.<java.math.BigInteger: long longValue()>();
v = v >> 1;
v = v & 4503599627370495L;
v = v & 1L;
v = v cmp 0L;
if v == 0 goto label;
v = v & 1L;
v = v cmp 0L;
if v != 0 goto label;
v = virtualinvoke v.<java.math.BigInteger: int getLowestSetBit()>();
if v >= v goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
if v == 0 goto label;
v = v + 1L;
goto label;
label:
v = v;
label:
v = v + 1023;
v = v << 52;
v = v + v;
v = virtualinvoke v.<java.math.BigInteger: int signum()>();
v = v & -9223372036854775808L;
v = v | v;
v = staticinvoke <java.lang.Double: double longBitsToDouble(long)>(v);
return v;
}
static double ensureNonNegative(double)
{
boolean v, v;
double v, v;
v := @parameter: double;
v = staticinvoke <java.lang.Double: boolean isNaN(double)>(v);
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <com.google.common.base.Preconditions: void checkArgument(boolean)>(v);
v = staticinvoke <java.lang.Math: double max(double,double)>(v, 0.0);
return v;
}
}