From df4fc050b52a04a3150be0c0d4639309bc422ae6 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Tue, 22 Jul 2025 00:30:53 +0800 Subject: [PATCH] feat: use half up instead of floor --- src/main/java/me/hatter/math/BirthdayParadox.java | 4 ++-- src/main/java/me/hatter/math/ChudnovskyAlgorithm.java | 6 +++--- src/main/java/me/hatter/math/EulerNumber.java | 4 ++-- src/main/java/me/hatter/math/LeibnizFormula.java | 6 +++--- src/main/java/me/hatter/math/WallisProduct.java | 8 ++++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/me/hatter/math/BirthdayParadox.java b/src/main/java/me/hatter/math/BirthdayParadox.java index 69dc806..cbbb9be 100644 --- a/src/main/java/me/hatter/math/BirthdayParadox.java +++ b/src/main/java/me/hatter/math/BirthdayParadox.java @@ -19,10 +19,10 @@ public class BirthdayParadox { public static BigDecimal p(int n) { BigDecimal p = BigDecimal.ONE; for (int i = 1; i < n; i++) { - p = p.multiply(BigDecimal.ONE.subtract(BigDecimal.valueOf(i).divide(BigDecimal.valueOf(365), 100, RoundingMode.FLOOR))); + p = p.multiply(BigDecimal.ONE.subtract(BigDecimal.valueOf(i).divide(BigDecimal.valueOf(365), 100, RoundingMode.HALF_UP))); } if (!p.equals(BigDecimal.ONE)) { - p = p.divide(BigDecimal.ONE, 100, RoundingMode.FLOOR); + p = p.divide(BigDecimal.ONE, 100, RoundingMode.HALF_UP); } return BigDecimal.ONE.subtract(p); } diff --git a/src/main/java/me/hatter/math/ChudnovskyAlgorithm.java b/src/main/java/me/hatter/math/ChudnovskyAlgorithm.java index e38d861..e11d12e 100644 --- a/src/main/java/me/hatter/math/ChudnovskyAlgorithm.java +++ b/src/main/java/me/hatter/math/ChudnovskyAlgorithm.java @@ -10,7 +10,7 @@ import java.math.RoundingMode; public class ChudnovskyAlgorithm { public static void main(String[] args) { - // 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 + // 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170680 System.out.println(computePi()); } @@ -26,10 +26,10 @@ public class ChudnovskyAlgorithm { m = (k.pow(3).subtract(k.multiply(BigInteger.valueOf(16)))).multiply(m).divide(BigInteger.valueOf(i + 1).pow(3)); l = l.add(BigInteger.valueOf(545140134)); x = x.multiply(BigInteger.valueOf(-262537412640768000L)); - s = s.add(new BigDecimal(m.multiply(l)).divide(new BigDecimal(x), 100, RoundingMode.FLOOR)); + s = s.add(new BigDecimal(m.multiply(l)).divide(new BigDecimal(x), 100, RoundingMode.HALF_UP)); k = k.add(BigInteger.valueOf(12)); } - return c.divide(s, 100, RoundingMode.FLOOR); + return c.divide(s, 100, RoundingMode.HALF_UP); } } diff --git a/src/main/java/me/hatter/math/EulerNumber.java b/src/main/java/me/hatter/math/EulerNumber.java index 1b97984..dac4987 100644 --- a/src/main/java/me/hatter/math/EulerNumber.java +++ b/src/main/java/me/hatter/math/EulerNumber.java @@ -6,7 +6,7 @@ import java.math.RoundingMode; public class EulerNumber { public static void main(String[] args) { - // 2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664238 + // 2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274 System.out.println(e()); } @@ -15,7 +15,7 @@ public class EulerNumber { BigDecimal f = BigDecimal.valueOf(1); for (long i = 1; i < 1000; i++) { f = f.multiply(BigDecimal.valueOf(i)); - e = e.add(BigDecimal.ONE.divide(f, 100, RoundingMode.FLOOR)); + e = e.add(BigDecimal.ONE.divide(f, 100, RoundingMode.HALF_UP)); } return e; } diff --git a/src/main/java/me/hatter/math/LeibnizFormula.java b/src/main/java/me/hatter/math/LeibnizFormula.java index e0306b5..5262987 100644 --- a/src/main/java/me/hatter/math/LeibnizFormula.java +++ b/src/main/java/me/hatter/math/LeibnizFormula.java @@ -6,7 +6,7 @@ import java.math.RoundingMode; public class LeibnizFormula { public static void main(String[] args) { - // 3.1415925535897932384628933832795028810721693993752011334749445868976601562867023677686597593566430148 + // 3.1415925535897932384628933832795028810721693993752011334749445868976601562867023677686597593566436288 System.out.println(pi()); } @@ -14,7 +14,7 @@ public class LeibnizFormula { BigDecimal p = BigDecimal.ZERO; for (long i = 0; i < 10000000; i++) { - BigDecimal v = BigDecimal.ONE.divide(BigDecimal.valueOf(i * 2 + 1), 100, RoundingMode.FLOOR); + BigDecimal v = BigDecimal.ONE.divide(BigDecimal.valueOf(i * 2 + 1), 100, RoundingMode.HALF_UP); if (i % 2 == 0) { p = p.add(v); } else { @@ -22,6 +22,6 @@ public class LeibnizFormula { } } - return p.multiply(BigDecimal.valueOf(4)).divide(BigDecimal.ONE, 100, RoundingMode.FLOOR); + return p.multiply(BigDecimal.valueOf(4)).divide(BigDecimal.ONE, 100, RoundingMode.HALF_UP); } } diff --git a/src/main/java/me/hatter/math/WallisProduct.java b/src/main/java/me/hatter/math/WallisProduct.java index 6b1fa07..9efaa3a 100644 --- a/src/main/java/me/hatter/math/WallisProduct.java +++ b/src/main/java/me/hatter/math/WallisProduct.java @@ -6,7 +6,7 @@ import java.math.RoundingMode; public class WallisProduct { public static void main(String[] args) { - // 3.1415925750499739534746260502048989270653181072075621931977986489848855062212872415726332946132240849 + // 3.1415925750499739534746260502048989270653181072075621931977986489848855062212872415726332946168657188 System.out.println(pi()); } @@ -15,11 +15,11 @@ public class WallisProduct { for (long i = 1; i < 10000000; i++) { BigDecimal doubleI = BigDecimal.valueOf(i * 2); p = p.multiply( - doubleI.divide(doubleI.subtract(BigDecimal.ONE), 100, RoundingMode.FLOOR) + doubleI.divide(doubleI.subtract(BigDecimal.ONE), 100, RoundingMode.HALF_UP) ).multiply( - doubleI.divide(doubleI.add(BigDecimal.ONE), 100, RoundingMode.FLOOR) + doubleI.divide(doubleI.add(BigDecimal.ONE), 100, RoundingMode.HALF_UP) ); - p = p.divide(BigDecimal.ONE, 100, RoundingMode.FLOOR); + p = p.divide(BigDecimal.ONE, 100, RoundingMode.HALF_UP); } return p; }