what-the-bank/sources/com/google/common/math/IntMath.java

457 lines
15 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package com.google.common.math;
import com.google.common.base.Preconditions;
import com.google.common.primitives.Ints;
import com.huawei.hms.android.HwBuildEx;
import com.huawei.hms.framework.common.ExceptionCode;
import com.kofax.mobile.sdk._internal.impl.camera.h;
import java.math.RoundingMode;
import org.bouncycastle.crypto.tls.CipherSuite;
/* loaded from: classes2.dex */
public final class IntMath {
static final int FLOOR_SQRT_MAX_INT = 46340;
static final int MAX_POWER_OF_SQRT2_UNSIGNED = -1257966797;
static final int MAX_SIGNED_POWER_OF_TWO = 1073741824;
static final byte[] maxLog10ForLeadingZeros = {9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0};
static final int[] powersOf10 = {1, 10, 100, 1000, HwBuildEx.VersionCodes.CUR_DEVELOPMENT, 100000, 1000000, ExceptionCode.CRASH_EXCEPTION, 100000000, 1000000000};
static final int[] halfPowersOf10 = {3, 31, 316, 3162, 31622, 316227, 3162277, 31622776, 316227766, Integer.MAX_VALUE};
private static final int[] factorials = {1, 1, 2, 6, 24, 120, h.Ay, 5040, 40320, 362880, 3628800, 39916800, 479001600};
static int[] biggestBinomials = {Integer.MAX_VALUE, Integer.MAX_VALUE, 65536, 2345, 477, CipherSuite.TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256, 110, 75, 58, 49, 43, 39, 37, 35, 34, 34, 33};
public static boolean isPowerOfTwo(int i) {
return (i > 0) & ((i & (i + (-1))) == 0);
}
static int lessThanBranchFree(int i, int i2) {
return (~(~(i - i2))) >>> 31;
}
public static int mean(int i, int i2) {
return (i & i2) + ((i ^ i2) >> 1);
}
public static int ceilingPowerOfTwo(int i) {
MathPreconditions.checkPositive("x", i);
if (i > 1073741824) {
StringBuilder sb = new StringBuilder(58);
sb.append("ceilingPowerOfTwo(");
sb.append(i);
sb.append(") not representable as an int");
throw new ArithmeticException(sb.toString());
}
return 1 << (-Integer.numberOfLeadingZeros(i - 1));
}
public static int floorPowerOfTwo(int i) {
MathPreconditions.checkPositive("x", i);
return Integer.highestOneBit(i);
}
/* JADX INFO: Access modifiers changed from: package-private */
/* renamed from: com.google.common.math.IntMath$1, reason: invalid class name */
/* loaded from: classes2.dex */
public static /* synthetic */ class AnonymousClass1 {
static final int[] $SwitchMap$java$math$RoundingMode;
static {
int[] iArr = new int[RoundingMode.values().length];
$SwitchMap$java$math$RoundingMode = iArr;
try {
iArr[RoundingMode.UNNECESSARY.ordinal()] = 1;
} catch (NoSuchFieldError unused) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.DOWN.ordinal()] = 2;
} catch (NoSuchFieldError unused2) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.FLOOR.ordinal()] = 3;
} catch (NoSuchFieldError unused3) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.UP.ordinal()] = 4;
} catch (NoSuchFieldError unused4) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.CEILING.ordinal()] = 5;
} catch (NoSuchFieldError unused5) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.HALF_DOWN.ordinal()] = 6;
} catch (NoSuchFieldError unused6) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.HALF_UP.ordinal()] = 7;
} catch (NoSuchFieldError unused7) {
}
try {
$SwitchMap$java$math$RoundingMode[RoundingMode.HALF_EVEN.ordinal()] = 8;
} catch (NoSuchFieldError unused8) {
}
}
}
public static int log2(int i, RoundingMode roundingMode) {
MathPreconditions.checkPositive("x", i);
switch (AnonymousClass1.$SwitchMap$java$math$RoundingMode[roundingMode.ordinal()]) {
case 1:
MathPreconditions.checkRoundingUnnecessary(isPowerOfTwo(i));
break;
case 2:
case 3:
break;
case 4:
case 5:
return 32 - Integer.numberOfLeadingZeros(i - 1);
case 6:
case 7:
case 8:
int numberOfLeadingZeros = Integer.numberOfLeadingZeros(i);
return (31 - numberOfLeadingZeros) + lessThanBranchFree(MAX_POWER_OF_SQRT2_UNSIGNED >>> numberOfLeadingZeros, i);
default:
throw new AssertionError();
}
return 31 - Integer.numberOfLeadingZeros(i);
}
/* JADX WARN: Failed to find 'out' block for switch in B:2:0x0015. Please report as an issue. */
public static int log10(int i, RoundingMode roundingMode) {
int lessThanBranchFree;
MathPreconditions.checkPositive("x", i);
int log10Floor = log10Floor(i);
int i2 = powersOf10[log10Floor];
switch (AnonymousClass1.$SwitchMap$java$math$RoundingMode[roundingMode.ordinal()]) {
case 1:
MathPreconditions.checkRoundingUnnecessary(i == i2);
case 2:
case 3:
return log10Floor;
case 4:
case 5:
lessThanBranchFree = lessThanBranchFree(i2, i);
return log10Floor + lessThanBranchFree;
case 6:
case 7:
case 8:
lessThanBranchFree = lessThanBranchFree(halfPowersOf10[log10Floor], i);
return log10Floor + lessThanBranchFree;
default:
throw new AssertionError();
}
}
private static int log10Floor(int i) {
byte b = maxLog10ForLeadingZeros[Integer.numberOfLeadingZeros(i)];
return b - lessThanBranchFree(i, powersOf10[b]);
}
public static int pow(int i, int i2) {
MathPreconditions.checkNonNegative("exponent", i2);
if (i == -2) {
if (i2 < 32) {
return (i2 & 1) == 0 ? 1 << i2 : -(1 << i2);
}
return 0;
}
if (i == -1) {
return (i2 & 1) == 0 ? 1 : -1;
}
if (i == 0) {
return i2 == 0 ? 1 : 0;
}
if (i == 1) {
return 1;
}
if (i == 2) {
if (i2 < 32) {
return 1 << i2;
}
return 0;
}
int i3 = 1;
while (i2 != 0) {
if (i2 == 1) {
return i * i3;
}
i3 *= (i2 & 1) == 0 ? 1 : i;
i *= i;
i2 >>= 1;
}
return i3;
}
/* JADX WARN: Failed to find 'out' block for switch in B:2:0x0011. Please report as an issue. */
public static int sqrt(int i, RoundingMode roundingMode) {
int lessThanBranchFree;
MathPreconditions.checkNonNegative("x", i);
int sqrtFloor = sqrtFloor(i);
switch (AnonymousClass1.$SwitchMap$java$math$RoundingMode[roundingMode.ordinal()]) {
case 1:
MathPreconditions.checkRoundingUnnecessary(sqrtFloor * sqrtFloor == i);
case 2:
case 3:
return sqrtFloor;
case 4:
case 5:
lessThanBranchFree = lessThanBranchFree(sqrtFloor * sqrtFloor, i);
return sqrtFloor + lessThanBranchFree;
case 6:
case 7:
case 8:
lessThanBranchFree = lessThanBranchFree((sqrtFloor * sqrtFloor) + sqrtFloor, i);
return sqrtFloor + lessThanBranchFree;
default:
throw new AssertionError();
}
}
private static int sqrtFloor(int i) {
return (int) Math.sqrt(i);
}
public static int divide(int i, int i2, RoundingMode roundingMode) {
Preconditions.checkNotNull(roundingMode);
if (i2 == 0) {
throw new ArithmeticException("/ by zero");
}
int i3 = i / i2;
int i4 = i - (i2 * i3);
if (i4 == 0) {
return i3;
}
int i5 = ((i ^ i2) >> 31) | 1;
switch (AnonymousClass1.$SwitchMap$java$math$RoundingMode[roundingMode.ordinal()]) {
case 1:
MathPreconditions.checkRoundingUnnecessary(i4 == 0);
return i3;
case 2:
return i3;
case 3:
if (i5 >= 0) {
return i3;
}
break;
case 4:
break;
case 5:
if (i5 <= 0) {
return i3;
}
break;
case 6:
case 7:
case 8:
int abs = Math.abs(i4);
int abs2 = abs - (Math.abs(i2) - abs);
if (abs2 == 0) {
if (roundingMode != RoundingMode.HALF_UP) {
if (!((roundingMode == RoundingMode.HALF_EVEN) & ((i3 & 1) != 0))) {
return i3;
}
}
} else if (abs2 <= 0) {
return i3;
}
break;
default:
throw new AssertionError();
}
return i3 + i5;
}
public static int mod(int i, int i2) {
if (i2 <= 0) {
StringBuilder sb = new StringBuilder(31);
sb.append("Modulus ");
sb.append(i2);
sb.append(" must be > 0");
throw new ArithmeticException(sb.toString());
}
int i3 = i % i2;
return i3 < 0 ? i3 + i2 : i3;
}
public static int gcd(int i, int i2) {
MathPreconditions.checkNonNegative("a", i);
MathPreconditions.checkNonNegative("b", i2);
if (i == 0) {
return i2;
}
if (i2 == 0) {
return i;
}
int numberOfTrailingZeros = Integer.numberOfTrailingZeros(i);
int i3 = i >> numberOfTrailingZeros;
int numberOfTrailingZeros2 = Integer.numberOfTrailingZeros(i2);
int i4 = i2 >> numberOfTrailingZeros2;
while (i3 != i4) {
int i5 = i3 - i4;
int i6 = (i5 >> 31) & i5;
int i7 = (i5 - i6) - i6;
i4 += i6;
i3 = i7 >> Integer.numberOfTrailingZeros(i7);
}
return i3 << Math.min(numberOfTrailingZeros, numberOfTrailingZeros2);
}
public static int checkedAdd(int i, int i2) {
long j = i + i2;
int i3 = (int) j;
MathPreconditions.checkNoOverflow(j == ((long) i3), "checkedAdd", i, i2);
return i3;
}
public static int checkedSubtract(int i, int i2) {
long j = i - i2;
int i3 = (int) j;
MathPreconditions.checkNoOverflow(j == ((long) i3), "checkedSubtract", i, i2);
return i3;
}
public static int checkedMultiply(int i, int i2) {
long j = i * i2;
int i3 = (int) j;
MathPreconditions.checkNoOverflow(j == ((long) i3), "checkedMultiply", i, i2);
return i3;
}
public static int checkedPow(int i, int i2) {
MathPreconditions.checkNonNegative("exponent", i2);
if (i == -2) {
MathPreconditions.checkNoOverflow(i2 < 32, "checkedPow", i, i2);
return (i2 & 1) == 0 ? 1 << i2 : (-1) << i2;
}
if (i == -1) {
return (i2 & 1) == 0 ? 1 : -1;
}
if (i == 0) {
return i2 == 0 ? 1 : 0;
}
if (i == 1) {
return 1;
}
if (i == 2) {
MathPreconditions.checkNoOverflow(i2 < 31, "checkedPow", i, i2);
return 1 << i2;
}
int i3 = 1;
while (i2 != 0) {
if (i2 == 1) {
return checkedMultiply(i3, i);
}
if ((i2 & 1) != 0) {
i3 = checkedMultiply(i3, i);
}
i2 >>= 1;
if (i2 > 0) {
MathPreconditions.checkNoOverflow((-46340 <= i) & (i <= FLOOR_SQRT_MAX_INT), "checkedPow", i, i2);
i *= i;
}
}
return i3;
}
public static int saturatedAdd(int i, int i2) {
return Ints.saturatedCast(i + i2);
}
public static int saturatedSubtract(int i, int i2) {
return Ints.saturatedCast(i - i2);
}
public static int saturatedMultiply(int i, int i2) {
return Ints.saturatedCast(i * i2);
}
public static int saturatedPow(int i, int i2) {
int i3;
MathPreconditions.checkNonNegative("exponent", i2);
if (i != -2) {
if (i == -1) {
return (i2 & 1) == 0 ? 1 : -1;
}
if (i == 0) {
return i2 == 0 ? 1 : 0;
}
if (i == 1) {
return 1;
}
if (i == 2) {
if (i2 >= 31) {
return Integer.MAX_VALUE;
}
return 1 << i2;
}
int i4 = i;
int i5 = i2;
int i6 = 1;
while (i5 != 0) {
if (i5 == 1) {
return saturatedMultiply(i6, i4);
}
if ((i5 & 1) != 0) {
i6 = saturatedMultiply(i6, i4);
}
i5 >>= 1;
if (i5 > 0) {
if ((-46340 > i4) || (i4 > FLOOR_SQRT_MAX_INT)) {
i3 = (i >>> 31) & i2 & 1;
} else {
i4 *= i4;
}
}
}
return i6;
}
if (i2 < 32) {
return (i2 & 1) == 0 ? 1 << i2 : (-1) << i2;
}
i3 = i2 & 1;
return i3 + Integer.MAX_VALUE;
}
public static int factorial(int i) {
MathPreconditions.checkNonNegative("n", i);
int[] iArr = factorials;
if (i < iArr.length) {
return iArr[i];
}
return Integer.MAX_VALUE;
}
public static int binomial(int i, int i2) {
MathPreconditions.checkNonNegative("n", i);
MathPreconditions.checkNonNegative("k", i2);
int i3 = 0;
Preconditions.checkArgument(i2 <= i, "k (%s) > n (%s)", i2, i);
if (i2 > (i >> 1)) {
i2 = i - i2;
}
int[] iArr = biggestBinomials;
if (i2 >= iArr.length || i > iArr[i2]) {
return Integer.MAX_VALUE;
}
if (i2 == 0) {
return 1;
}
if (i2 == 1) {
return i;
}
long j = 1;
while (i3 < i2) {
long j2 = i - i3;
i3++;
j = (j * j2) / i3;
}
return (int) j;
}
public static boolean isPrime(int i) {
return LongMath.isPrime(i);
}
private IntMath() {
}
}