浮点错误

Hon*_*Wei 4 c floating-point floating-point-conversion

#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;
}
Run Code Online (Sandbox Code Playgroud)

为什么在不同的循环中我得到不同的答案.有浮动错误吗?当我输入5000000总和时,16.002164235299但是当我使用另一个循环for(符号部分)时,我得到了总和16.002164235300.

Arj*_*kar 9

因为浮点数学不是关联的:

(a + b) + c不一定等于a + (b + c)