feat: add binomial theorem

This commit is contained in:
2025-07-27 17:15:15 +08:00
parent 51a52abb5e
commit 241e7e2222
2 changed files with 52 additions and 14 deletions

View 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);
}
}