what-the-bank/sources/org/bouncycastle/math/ec/SimpleBigDecimal.java

156 lines
5.1 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package org.bouncycastle.math.ec;
import java.math.BigInteger;
/* loaded from: classes6.dex */
class SimpleBigDecimal {
private static final long serialVersionUID = 1;
private final BigInteger bigInt;
private final int scale;
public String toString() {
if (this.scale == 0) {
return this.bigInt.toString();
}
BigInteger floor = floor();
BigInteger subtract = this.bigInt.subtract(floor.shiftLeft(this.scale));
if (this.bigInt.signum() == -1) {
subtract = ECConstants.ONE.shiftLeft(this.scale).subtract(subtract);
}
if (floor.signum() == -1 && !subtract.equals(ECConstants.ZERO)) {
floor = floor.add(ECConstants.ONE);
}
String obj = floor.toString();
char[] cArr = new char[this.scale];
String bigInteger = subtract.toString(2);
int length = bigInteger.length();
int i = this.scale - length;
for (int i2 = 0; i2 < i; i2++) {
cArr[i2] = '0';
}
for (int i3 = 0; i3 < length; i3++) {
cArr[i + i3] = bigInteger.charAt(i3);
}
String str = new String(cArr);
StringBuffer stringBuffer = new StringBuffer(obj);
stringBuffer.append(".");
stringBuffer.append(str);
return stringBuffer.toString();
}
public SimpleBigDecimal subtract(SimpleBigDecimal simpleBigDecimal) {
return add(simpleBigDecimal.negate());
}
public SimpleBigDecimal subtract(BigInteger bigInteger) {
return new SimpleBigDecimal(this.bigInt.subtract(bigInteger.shiftLeft(this.scale)), this.scale);
}
public SimpleBigDecimal shiftLeft(int i) {
return new SimpleBigDecimal(this.bigInt.shiftLeft(i), this.scale);
}
public BigInteger round() {
return add(new SimpleBigDecimal(ECConstants.ONE, 1).adjustScale(this.scale)).floor();
}
public SimpleBigDecimal negate() {
return new SimpleBigDecimal(this.bigInt.negate(), this.scale);
}
public SimpleBigDecimal multiply(SimpleBigDecimal simpleBigDecimal) {
checkScale(simpleBigDecimal);
BigInteger multiply = this.bigInt.multiply(simpleBigDecimal.bigInt);
int i = this.scale;
return new SimpleBigDecimal(multiply, i + i);
}
public SimpleBigDecimal multiply(BigInteger bigInteger) {
return new SimpleBigDecimal(this.bigInt.multiply(bigInteger), this.scale);
}
public long longValue() {
return floor().longValue();
}
public int intValue() {
return floor().intValue();
}
public int hashCode() {
return this.bigInt.hashCode() ^ this.scale;
}
public int getScale() {
return this.scale;
}
public BigInteger floor() {
return this.bigInt.shiftRight(this.scale);
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof SimpleBigDecimal)) {
return false;
}
SimpleBigDecimal simpleBigDecimal = (SimpleBigDecimal) obj;
return this.bigInt.equals(simpleBigDecimal.bigInt) && this.scale == simpleBigDecimal.scale;
}
public SimpleBigDecimal divide(SimpleBigDecimal simpleBigDecimal) {
checkScale(simpleBigDecimal);
return new SimpleBigDecimal(this.bigInt.shiftLeft(this.scale).divide(simpleBigDecimal.bigInt), this.scale);
}
public SimpleBigDecimal divide(BigInteger bigInteger) {
return new SimpleBigDecimal(this.bigInt.divide(bigInteger), this.scale);
}
public int compareTo(SimpleBigDecimal simpleBigDecimal) {
checkScale(simpleBigDecimal);
return this.bigInt.compareTo(simpleBigDecimal.bigInt);
}
public int compareTo(BigInteger bigInteger) {
return this.bigInt.compareTo(bigInteger.shiftLeft(this.scale));
}
public SimpleBigDecimal adjustScale(int i) {
if (i < 0) {
throw new IllegalArgumentException("scale may not be negative");
}
int i2 = this.scale;
return i == i2 ? this : new SimpleBigDecimal(this.bigInt.shiftLeft(i - i2), i);
}
public SimpleBigDecimal add(SimpleBigDecimal simpleBigDecimal) {
checkScale(simpleBigDecimal);
return new SimpleBigDecimal(this.bigInt.add(simpleBigDecimal.bigInt), this.scale);
}
public SimpleBigDecimal add(BigInteger bigInteger) {
return new SimpleBigDecimal(this.bigInt.add(bigInteger.shiftLeft(this.scale)), this.scale);
}
public static SimpleBigDecimal getInstance(BigInteger bigInteger, int i) {
return new SimpleBigDecimal(bigInteger.shiftLeft(i), i);
}
private void checkScale(SimpleBigDecimal simpleBigDecimal) {
if (this.scale != simpleBigDecimal.scale) {
throw new IllegalArgumentException("Only SimpleBigDecimal of same scale allowed in arithmetic operations");
}
}
public SimpleBigDecimal(BigInteger bigInteger, int i) {
if (i < 0) {
throw new IllegalArgumentException("scale may not be negative");
}
this.bigInt = bigInteger;
this.scale = i;
}
}