本文整理了Java中java.math.BigDecimal.pow()
方法的一些代码示例,展示了BigDecimal.pow()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。BigDecimal.pow()
方法的具体详情如下:
包路径:java.math.BigDecimal
类名称:BigDecimal
方法名:pow
[英]Returns a new BigDecimal whose value is thisn. The scale of the result is n * this.scale().
x.pow(0) returns 1, even if x == 0.
Implementation Note: The implementation is based on the ANSI standard X3.274-1996 algorithm.
[中]返回值为thisn的新BigDecimal。结果的比例是n*this。比例()。
x、 pow(0)返回1,即使x==0。
实施说明:该实施基于ANSI标准X3。274-1996算法。
代码示例来源:origin: looly/hutool
/**
* 提供精确的幂运算
*
* @param number 底数
* @param n 指数
* @return 幂的积
* @since 4.1.0
*/
public static BigDecimal pow(BigDecimal number, int n) {
return number.pow(n);
}
代码示例来源:origin: looly/hutool
/**
* 提供精确的幂运算
*
* @param number 底数
* @param n 指数
* @return 幂的积
* @since 4.1.0
*/
public static BigDecimal pow(BigDecimal number, int n) {
return number.pow(n);
}
代码示例来源:origin: web3j/web3j
Unit(String name, int factor) {
this.name = name;
this.weiFactor = BigDecimal.TEN.pow(factor);
}
代码示例来源:origin: deeplearning4j/nd4j
/**
* Raise to an integer power and round.
*
* @param x The base.
* @param n The exponent.
* @return x^n.
*/
static public BigDecimal powRound(final BigDecimal x, final int n) {
/* The relative error in the result is n times the relative error in the input.
* The estimation is slightly optimistic due to the integer rounding of the logarithm.
*/
MathContext mc = new MathContext(x.precision() - (int) Math.log10((double) (Math.abs(n))));
return x.pow(n, mc);
} /* BigDecimalMath.powRound */
代码示例来源:origin: kiegroup/optaplanner
@Override
public HardMediumSoftBigDecimalScore power(double exponent) {
BigDecimal exponentBigDecimal = BigDecimal.valueOf(exponent);
// The (unspecified) scale/precision of the exponent should have no impact on the returned scale/precision
// TODO FIXME remove .intValue() so non-integer exponents produce correct results
// None of the normal Java libraries support BigDecimal.pow(BigDecimal)
return new HardMediumSoftBigDecimalScore(
(int) Math.floor(Math.pow(initScore, exponent)),
hardScore.pow(exponentBigDecimal.intValue()).setScale(hardScore.scale(), RoundingMode.FLOOR),
mediumScore.pow(exponentBigDecimal.intValue()).setScale(mediumScore.scale(), RoundingMode.FLOOR),
softScore.pow(exponentBigDecimal.intValue()).setScale(softScore.scale(), RoundingMode.FLOOR));
}
代码示例来源:origin: kiegroup/optaplanner
@Override
public HardSoftBigDecimalScore power(double exponent) {
// Intentionally not taken "new BigDecimal(multiplicand, MathContext.UNLIMITED)"
// because together with the floor rounding it gives unwanted behaviour
BigDecimal exponentBigDecimal = BigDecimal.valueOf(exponent);
// The (unspecified) scale/precision of the exponent should have no impact on the returned scale/precision
// TODO FIXME remove .intValue() so non-integer exponents produce correct results
// None of the normal Java libraries support BigDecimal.pow(BigDecimal)
return new HardSoftBigDecimalScore(
(int) Math.floor(Math.pow(initScore, exponent)),
hardScore.pow(exponentBigDecimal.intValue()).setScale(hardScore.scale(), RoundingMode.FLOOR),
softScore.pow(exponentBigDecimal.intValue()).setScale(softScore.scale(), RoundingMode.FLOOR));
}
代码示例来源:origin: kiegroup/optaplanner
@Override
public SimpleBigDecimalScore power(double exponent) {
// Intentionally not taken "new BigDecimal(multiplicand, MathContext.UNLIMITED)"
// because together with the floor rounding it gives unwanted behaviour
BigDecimal exponentBigDecimal = BigDecimal.valueOf(exponent);
// The (unspecified) scale/precision of the exponent should have no impact on the returned scale/precision
// TODO FIXME remove .intValue() so non-integer exponents produce correct results
// None of the normal Java libraries support BigDecimal.pow(BigDecimal)
return new SimpleBigDecimalScore(
(int) Math.floor(Math.pow(initScore, exponent)),
score.pow(exponentBigDecimal.intValue()).setScale(score.scale(), RoundingMode.FLOOR));
}
代码示例来源:origin: apache/drill
/**
* Calculates and returns square root for specified BigDecimal
* with specified number of digits alter decimal point.
*
* @param in BigDecimal which square root should be calculated
* @param scale number of digits alter decimal point in the result value.
* @return square root for specified BigDecimal
*/
public static BigDecimal sqrt(BigDecimal in, int scale) {
// unscaled BigInteger value from specified BigDecimal with doubled number of digits after decimal point
// was used to calculate sqrt using Guava's BigIntegerMath.
BigInteger valueWithDoubleMaxPrecision =
in.multiply(BigDecimal.TEN.pow(scale * 2)).setScale(0, RoundingMode.HALF_UP).unscaledValue();
return new BigDecimal(
BigIntegerMath.sqrt(valueWithDoubleMaxPrecision, RoundingMode.HALF_UP), scale);
}
代码示例来源:origin: kiegroup/optaplanner
@Override
public BendableBigDecimalScore power(double exponent) {
BigDecimal[] newHardScores = new BigDecimal[hardScores.length];
BigDecimal[] newSoftScores = new BigDecimal[softScores.length];
BigDecimal actualExponent = BigDecimal.valueOf(exponent);
// The (unspecified) scale/precision of the exponent should have no impact on the returned scale/precision
// TODO FIXME remove .intValue() so non-integer exponents produce correct results
// None of the normal Java libraries support BigDecimal.pow(BigDecimal)
for (int i = 0; i < newHardScores.length; i++) {
BigDecimal hardScore = hardScores[i];
newHardScores[i] = hardScore.pow(actualExponent.intValue()).setScale(hardScore.scale(), RoundingMode.FLOOR);
}
for (int i = 0; i < newSoftScores.length; i++) {
BigDecimal softScore = softScores[i];
newSoftScores[i] = softScore.pow(actualExponent.intValue()).setScale(softScore.scale(), RoundingMode.FLOOR);
}
return new BendableBigDecimalScore(
(int) Math.floor(Math.pow(initScore, exponent)),
newHardScores, newSoftScores);
}
代码示例来源:origin: org.codehaus.groovy/groovy
/**
* Power of a BigDecimal to an integer certain exponent. If the
* exponent is positive, call the BigDecimal.pow(int) method to
* maintain precision. Called by the '**' operator.
*
* @param self a BigDecimal
* @param exponent an Integer exponent
* @return a Number to the power of a the exponent
*/
public static Number power(BigDecimal self, Integer exponent) {
if (exponent >= 0) {
return self.pow(exponent);
} else {
return power(self, (double) exponent);
}
}
代码示例来源:origin: jphp-group/jphp
private static BigDecimal bcpowImpl(BigDecimal base, BigInteger exp, int scale) {
if (exp.compareTo(BigInteger.ZERO) == 0)
return BigDecimal.ONE;
boolean isNeg;
if (exp.compareTo(BigInteger.ZERO) < 0) {
isNeg = true;
exp = exp.negate();
}
else
isNeg = false;
BigDecimal result = BigDecimal.ZERO;
while (exp.compareTo(BigInteger.ZERO) > 0) {
BigInteger expSub = exp.min(INTEGER_MAX);
exp = exp.subtract(expSub);
result = result.add(base.pow(expSub.intValue()));
}
if (isNeg)
result = BigDecimal.ONE.divide(result, scale + 2, RoundingMode.DOWN);
result = result.setScale(scale, RoundingMode.DOWN);
if (result.compareTo(BigDecimal.ZERO) == 0)
return BigDecimal.ZERO;
result = result.stripTrailingZeros();
return result;
}
代码示例来源:origin: stackoverflow.com
private static final BigDecimal SQRT_PRE = new BigDecimal(10).pow(SQRT_DIG.intValue());
BigDecimal fx = xn.pow(2).add(c.negate());
BigDecimal fpx = xn.multiply(new BigDecimal(2));
BigDecimal xn1 = fx.divide(fpx,2*SQRT_DIG.intValue(),RoundingMode.HALF_DOWN);
xn1 = xn.add(xn1.negate());
BigDecimal currentSquare = xn1.pow(2);
BigDecimal currentPrecision = currentSquare.subtract(c);
currentPrecision = currentPrecision.abs();
代码示例来源:origin: plantuml/plantuml
public BigDecimal eval(Number vv1, Number vv2) {
BigDecimal v1 = (BigDecimal) vv1;
BigDecimal v2 = (BigDecimal) vv2;
assertNotNull(v1, v2);
/*-
* Thanks to Gene Marin:
* http://stackoverflow.com/questions/3579779/how-to-do-a-fractional-power-on-bigdecimal-in-java
*/
int signOf2 = ((BigDecimal) v2).signum();
double dn1 = v1.doubleValue();
v2 = v2.multiply(new BigDecimal(signOf2)); // n2 is now positive
BigDecimal remainderOf2 = v2.remainder(BigDecimal.ONE);
BigDecimal n2IntPart = v2.subtract(remainderOf2);
BigDecimal intPow = v1.pow(n2IntPart.intValueExact(), mc);
BigDecimal doublePow = new BigDecimal(Math.pow(dn1, remainderOf2.doubleValue()));
BigDecimal result = intPow.multiply(doublePow, mc);
if (signOf2 == -1) {
result = BigDecimal.ONE.divide(result, mc.getPrecision(), RoundingMode.HALF_UP);
}
return result;
}
});
代码示例来源:origin: BroadleafCommerce/BroadleafCommerce
/**
* Returns the remainder amount if the passed in totalAmount was divided by the
* quantity taking into account the normal unit of the currency (e.g. .01 for US).
*
* @param totalAmount
* @param quantity
* @return
*/
public static int calculateRemainder(Money totalAmount, int quantity) {
if (totalAmount == null || totalAmount.isZero() || quantity == 0) {
return 0;
}
// Use this to convert to a whole number (e.g. 1.05 becomes 105 in US currency).
BigDecimal multiplier = new BigDecimal(10).pow(totalAmount.getAmount().scale());
BigDecimal amount = totalAmount.getAmount().multiply(multiplier);
BigDecimal remainder = amount.remainder(new BigDecimal(quantity), ROUND_FLOOR_MATH_CONTEXT);
return remainder.toBigInteger().intValue();
}
代码示例来源:origin: spring-projects/spring-framework
return new TypedValue(leftBigDecimal.pow(rightNumber.intValue()));
代码示例来源:origin: deeplearning4j/nd4j
/**
* The hypotenuse.
*
* @param x the first argument.
* @param y the second argument.
* @return the square root of the sum of the squares of the two arguments, sqrt(x^2+y^2).
*/
static public BigDecimal hypot(final BigDecimal x, final BigDecimal y) {
/* compute x^2+y^2
*/
BigDecimal z = x.pow(2).add(y.pow(2));
/* truncate to the precision set by x and y. Absolute error = 2*x*xerr+2*y*yerr,
* where the two errors are 1/2 of the ulp’s. Two intermediate protectio digits.
*/
BigDecimal zerr = x.abs().multiply(x.ulp()).add(y.abs().multiply(y.ulp()));
MathContext mc = new MathContext(2 + err2prec(z, zerr));
/* Pull square root */
z = sqrt(z.round(mc));
/* Final rounding. Absolute error in the square root is (y*yerr+x*xerr)/z, where zerr holds 2*(x*xerr+y*yerr).
*/
mc = new MathContext(err2prec(z.doubleValue(), 0.5 * zerr.doubleValue() / z.doubleValue()));
return z.round(mc);
} /* BigDecimalMath.hypot */
代码示例来源:origin: deeplearning4j/nd4j
/**
* The hypotenuse.
*
* @param n the first argument.
* @param x the second argument.
* @return the square root of the sum of the squares of the two arguments, sqrt(n^2+x^2).
*/
static public BigDecimal hypot(final int n, final BigDecimal x) {
/* compute n^2+x^2 in infinite precision
*/
BigDecimal z = (new BigDecimal(n)).pow(2).add(x.pow(2));
/* Truncate to the precision set by x. Absolute error = in z (square of the result) is |2*x*xerr|,
* where the error is 1/2 of the ulp. Two intermediate protection digits.
* zerr is a signed value, but used only in conjunction with err2prec(), so this feature does not harm.
*/
double zerr = x.doubleValue() * x.ulp().doubleValue();
MathContext mc = new MathContext(2 + err2prec(z.doubleValue(), zerr));
/* Pull square root */
z = sqrt(z.round(mc));
/* Final rounding. Absolute error in the square root is x*xerr/z, where zerr holds 2*x*xerr.
*/
mc = new MathContext(err2prec(z.doubleValue(), 0.5 * zerr / z.doubleValue()));
return z.round(mc);
} /* BigDecimalMath.hypot */
代码示例来源:origin: apache/hive
@HiveDecimalVersionV1
public HiveDecimalV1 pow(int n) {
BigDecimal result = normalize(bd.pow(n), false);
return result == null ? null : new HiveDecimalV1(result);
}
代码示例来源:origin: deeplearning4j/nd4j
/**
* The inverse hyperbolic cosine.
*
* @param x The argument.
* @return The arccosh(x) .
*/
static public BigDecimal acosh(final BigDecimal x) {
if (x.compareTo(BigDecimal.ONE) < 0) {
throw new ArithmeticException("Out of range argument cosh " + x.toString());
} else if (x.compareTo(BigDecimal.ONE) == 0) {
return BigDecimal.ZERO;
} else {
BigDecimal xhighpr = scalePrec(x, 2);
/* arccosh(x) = log(x+sqrt(x^2-1))
*/
BigDecimal logx = log(sqrt(xhighpr.pow(2).subtract(BigDecimal.ONE)).add(xhighpr));
/* The absolute error in arcsinh x is err(x)/sqrt(x^2-1)
*/
double xDbl = x.doubleValue();
double eps = 0.5 * x.ulp().doubleValue() / Math.sqrt(xDbl * xDbl - 1.);
MathContext mc = new MathContext(err2prec(logx.doubleValue(), eps));
return logx.round(mc);
}
} /* BigDecimalMath.acosh */
代码示例来源:origin: apache/ignite
/**
* @param depositCache Deposit cache.
* @param depositKey Deposit key.
*/
private void checkDeposit(IgniteCache<String, BinaryObject> depositCache, String depositKey) {
IgniteCache histCache = node.cache(DEPOSIT_HISTORY_CACHE).withKeepBinary();
BinaryObject deposit = depositCache.get(depositKey);
BigDecimal startBalance = deposit.field(BALANCE_ON_DAY_OPEN);
BigDecimal balance = deposit.field(BALANCE);
BigDecimal rate = deposit.field(MARGIN_RATE);
BigDecimal expBalance;
SqlFieldsQuery findDepositHist = new SqlFieldsQuery(DEPOSIT_OPERATION_COUNT_SQL);
try (QueryCursor cursor1 = histCache.query(findDepositHist.setArgs(depositKey))) {
Long cnt = (Long)((ArrayList)cursor1.iterator().next()).get(0);
expBalance = startBalance.multiply(rate.add(BigDecimal.ONE).pow(cnt.intValue()));
}
expBalance = expBalance.setScale(2, BigDecimal.ROUND_DOWN);
balance = balance.setScale(2, BigDecimal.ROUND_DOWN);
if (checkBalance && !expBalance.equals(balance)) {
node.log().error("Deposit " + depositKey + " has incorrect balance "
+ balance + " when expected " + expBalance, null);
throw new IgniteException("Deposit " + depositKey + " has incorrect balance "
+ balance + " when expected " + expBalance);
}
}
}
内容来源于网络,如有侵权,请联系作者删除!