feat: add binomial theorem
This commit is contained in:
36
src/main/java/me/hatter/math/BinomialTheorem.java
Normal file
36
src/main/java/me/hatter/math/BinomialTheorem.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package me.hatter.math;
|
||||
|
||||
import me.hatter.math.util.MathUtil;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
// https://zhuanlan.zhihu.com/p/34484169
|
||||
public class BinomialTheorem {
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(power(BigDecimal.valueOf(0.5), BigDecimal.valueOf(-0.3)));
|
||||
System.out.println(Math.pow(0.5, -0.3));
|
||||
System.out.println(power(BigDecimal.valueOf(0.6), BigDecimal.valueOf(3.1)));
|
||||
System.out.println(Math.pow(0.6, 3.1));
|
||||
}
|
||||
|
||||
public static BigDecimal power(BigDecimal x, BigDecimal u) {
|
||||
return powerWithN(x, u, 100);
|
||||
}
|
||||
|
||||
public static BigDecimal powerWithN(BigDecimal x, BigDecimal u, long n) {
|
||||
BigDecimal result = BigDecimal.ZERO;
|
||||
for (long i = 0; i < n; i++) {
|
||||
BigDecimal ux = BigDecimal.ONE;
|
||||
for (long j = 0; j < i; j++) {
|
||||
ux = ux.multiply(u.subtract(BigDecimal.valueOf(j)));
|
||||
}
|
||||
result = result.add(
|
||||
ux.divide(new BigDecimal(MathUtil.factorial(i)), 100, RoundingMode.HALF_UP)
|
||||
.multiply(x.subtract(BigDecimal.ONE).pow((int) i))
|
||||
);
|
||||
}
|
||||
return result.setScale(100, RoundingMode.HALF_UP);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user