この問題は、Programming in Java book-site から解決しています (HW ではなく、練習用です。http://introcs.cs.princeton.edu/java/13flow/の Q15 ):
調和級数 1/1 + 1/4 + 1/9 + 1/16 + ... + 1/N2 の合計を求めます。for ループには 4 つのバリエーションがあり、そのうちのいくつかは正しい答えを返すはずです。私の予想される答えはコメントにあり、実際の結果は以下のとおりです。
public class OneThreeExFifteen {
public static void main(String[] args) {
int N = 1000000;
double s1=0 , s2 = 0, s3 = 0, s4=0;
for (int i = 1; i <= N ; i++ )
s1 = s1 + 1 / ( i * i ); // Expected s1 = 1
for (int i = 1 ; i <= N ; i++ )
s2 = s2 + 1.0 / i * i; // Expected s2 = 1000000
for (int i = 1 ; i <= N ; i++)
s3 = s3 + 1.0 / (i * i) ; // Correctly computes the series sum
for (int i = 1; i <= N ; i++ )
s4 = s4 + 1 / (1.0 * i * i) ; // Correctly computes the serires sum
System.out.println("for loop 1" + s1);
System.out.println("for loop 2" +s2);
System.out.println("for loop 3" +s3);
System.out.println("for loop 4" +s4);
}
}
結果:
for loop 1 ( I get a Divide by 0 error - had to comment out this loop)
for loop 2 1000000.0
for loop 3 Infinity
for loop 4 1.64493306684877
質問 - なぜ私は得るのですか
a) ゼロ除算エラー?
b) for ループ 3 の場合の無限大の結果 ?