从最小到最大添加数字的舍入误差会更低。如果将结果与更高的精度进行比较,则可以看到越小越接近。
double sum = 0;
for (int i = 1; i <= 5000; i++) {
sum += 1.0/i;
}
System.out.println("From largest to smallest " + sum);
double sum2 = 0;
for (int i = 5000; i >= 1; i--) {
sum2 += 1.0/i;
}
System.out.println("From smallest to largest " + sum2);
BigDecimal sum3 = BigDecimal.ZERO;
for (int i = 5000; i >= 1; i--) {
sum3 = sum3.add(BigDecimal.ONE.divide(BigDecimal.valueOf(i), 30, BigDecimal.ROUND_HALF_UP));
}
System.out.println("BigDecimal " + sum3);
打印
From largest to smallest 9.094508852984404
From smallest to largest 9.09450885298443
BigDecimal 9.094508852984436967261245533401
你不需要的'/'是双打两个操作数。 – sje397
@sje哦,你知道什么哈哈。我一定很累 – Paulpro
的确如此,但我认为这样更明确一点,那就是双重打分。 –