CrackMe.apk
Download file
package com.google.common.math;
import com.google.common.base.Preconditions;
import java.math.BigInteger;
@ElementTypesAreNonnullByDefault
final class DoubleUtils {
static final int EXPONENT_BIAS = 1023;
static final long EXPONENT_MASK = 9218868437227405312L;
static final long IMPLICIT_BIT = 4503599627370496L;
static final long ONE_BITS = 4607182418800017408L;
static final int SIGNIFICAND_BITS = 52;
static final long SIGNIFICAND_MASK = 4503599627370495L;
static final long SIGN_MASK = Long.MIN_VALUE;
private DoubleUtils() {
}
static double nextDown(double d) {
return -Math.nextUp(-d);
}
static long getSignificand(double d) {
Preconditions.checkArgument(isFinite(d), "not a normal value");
int exponent = Math.getExponent(d);
long doubleToRawLongBits = Double.doubleToRawLongBits(d) & SIGNIFICAND_MASK;
return exponent == -1023 ? doubleToRawLongBits << 1 : doubleToRawLongBits | IMPLICIT_BIT;
}
static boolean isFinite(double d) {
return Math.getExponent(d) <= 1023;
}
static boolean isNormal(double d) {
return Math.getExponent(d) >= -1022;
}
static double scaleNormalize(double d) {
return Double.longBitsToDouble((Double.doubleToRawLongBits(d) & SIGNIFICAND_MASK) | ONE_BITS);
}
static double bigToDouble(BigInteger bigInteger) {
BigInteger abs = bigInteger.abs();
boolean z = true;
int bitLength = abs.bitLength() - 1;
if (bitLength < 63) {
return (double) bigInteger.longValue();
}
if (bitLength > 1023) {
return ((double) bigInteger.signum()) * Double.POSITIVE_INFINITY;
}
int i = (bitLength - 52) - 1;
long longValue = abs.shiftRight(i).longValue();
long j = (longValue >> 1) & SIGNIFICAND_MASK;
if ((longValue & 1) == 0 || ((j & 1) == 0 && abs.getLowestSetBit() >= i)) {
z = false;
}
if (z) {
j++;
}
return Double.longBitsToDouble(((((long) (bitLength + 1023)) << 52) + j) | (((long) bigInteger.signum()) & Long.MIN_VALUE));
}
static double ensureNonNegative(double d) {
Preconditions.checkArgument(!Double.isNaN(d));
return Math.max(d, 0.0d);
}
}
Download file