feat: use half up instead of floor

This commit is contained in:
2025-07-22 00:30:53 +08:00
parent 0d6eed0568
commit df4fc050b5
5 changed files with 14 additions and 14 deletions

View File

@@ -19,10 +19,10 @@ public class BirthdayParadox {
public static BigDecimal p(int n) { public static BigDecimal p(int n) {
BigDecimal p = BigDecimal.ONE; BigDecimal p = BigDecimal.ONE;
for (int i = 1; i < n; i++) { 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)) { 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); return BigDecimal.ONE.subtract(p);
} }

View File

@@ -10,7 +10,7 @@ import java.math.RoundingMode;
public class ChudnovskyAlgorithm { public class ChudnovskyAlgorithm {
public static void main(String[] args) { public static void main(String[] args) {
// 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 // 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170680
System.out.println(computePi()); 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)); 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)); l = l.add(BigInteger.valueOf(545140134));
x = x.multiply(BigInteger.valueOf(-262537412640768000L)); 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)); k = k.add(BigInteger.valueOf(12));
} }
return c.divide(s, 100, RoundingMode.FLOOR); return c.divide(s, 100, RoundingMode.HALF_UP);
} }
} }

View File

@@ -6,7 +6,7 @@ import java.math.RoundingMode;
public class EulerNumber { public class EulerNumber {
public static void main(String[] args) { public static void main(String[] args) {
// 2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664238 // 2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274
System.out.println(e()); System.out.println(e());
} }
@@ -15,7 +15,7 @@ public class EulerNumber {
BigDecimal f = BigDecimal.valueOf(1); BigDecimal f = BigDecimal.valueOf(1);
for (long i = 1; i < 1000; i++) { for (long i = 1; i < 1000; i++) {
f = f.multiply(BigDecimal.valueOf(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; return e;
} }

View File

@@ -6,7 +6,7 @@ import java.math.RoundingMode;
public class LeibnizFormula { public class LeibnizFormula {
public static void main(String[] args) { public static void main(String[] args) {
// 3.1415925535897932384628933832795028810721693993752011334749445868976601562867023677686597593566430148 // 3.1415925535897932384628933832795028810721693993752011334749445868976601562867023677686597593566436288
System.out.println(pi()); System.out.println(pi());
} }
@@ -14,7 +14,7 @@ public class LeibnizFormula {
BigDecimal p = BigDecimal.ZERO; BigDecimal p = BigDecimal.ZERO;
for (long i = 0; i < 10000000; i++) { 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) { if (i % 2 == 0) {
p = p.add(v); p = p.add(v);
} else { } 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);
} }
} }

View File

@@ -6,7 +6,7 @@ import java.math.RoundingMode;
public class WallisProduct { public class WallisProduct {
public static void main(String[] args) { public static void main(String[] args) {
// 3.1415925750499739534746260502048989270653181072075621931977986489848855062212872415726332946132240849 // 3.1415925750499739534746260502048989270653181072075621931977986489848855062212872415726332946168657188
System.out.println(pi()); System.out.println(pi());
} }
@@ -15,11 +15,11 @@ public class WallisProduct {
for (long i = 1; i < 10000000; i++) { for (long i = 1; i < 10000000; i++) {
BigDecimal doubleI = BigDecimal.valueOf(i * 2); BigDecimal doubleI = BigDecimal.valueOf(i * 2);
p = p.multiply( p = p.multiply(
doubleI.divide(doubleI.subtract(BigDecimal.ONE), 100, RoundingMode.FLOOR) doubleI.divide(doubleI.subtract(BigDecimal.ONE), 100, RoundingMode.HALF_UP)
).multiply( ).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; return p;
} }