4
#include <stdio.h>
int main()
{
    int n;
    while ( scanf( "%d", &n ) != EOF ) {
        double sum = 0,k;
        if( n > 5000000 || n<=0 )   //the judgment of the arrange
            break;
        for ( int i = 1; i <= n; i++ ) {
            k = (double) 1 / i;
            sum += k;
        }
        /*
        for ( int i = n; i > 0; i-- ) {
            k = 1 / (double)i;
            sum += k;
        }
        */
        printf("%.12lf\n", sum);
    }
    return 0;
}

なぜ別のループで私は別の答えを得るのですか。フロートエラーはありますか?5000000合計を入力する16.002164235299と、for(表記部分)のもう一方のループを使用すると、合計が得られ16.002164235300ます。

4

2 に答える 2

9

浮動小数点演算は結合法則ではないため:

つまり(a + b) + c、必ずしも等しいとは限りませんa + (b + c)

于 2012-11-19T12:33:03.857 に答える