如何用java编写1+1/2+1/3....+1/4999+1/5000? 我已经尝试过了,但没有成功。
public class Harmonic{
public static void main(String[] args){
double sum = 0;
for(int i=1; i<=5000; i++){
sum+=1/i;
}
System.out.println(sum);
}
}
最佳答案
将数字从小到大相加将具有较低的舍入误差。如果以更高的精度比较结果,您会发现小到大更接近。
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
关于java - 如何在java中编写1+1/2+1/3....+1/4999+1/5000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6895117/