從最小到最大添加數字的舍入誤差會更低。如果將結果與更高的精度進行比較,則可以看到越小越接近。
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
的確如此,但我認爲這樣更明確一點,那就是雙重打分。 –