棋盘放麦粒问题,为什么结果不对?

题目:相传古印度国王奖励国际象棋宰相达依尔,问他想要什么。达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,后面一格的麦子总是前一格一麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不容易,刚想答应,如果你穿越时空,这时在国王旁边站着,你会不会劝国王别答应,为什么?
#include<math.h>

int main()

{

float a,i,n,k;

n=1;

for(i=1,a=1;a<=63;a++)

{

i=i*2;

n=n+i;

if(a==63)

printf("%f",n);

}

return 0;

}

img


结果后四位不应该是1615吗,为什么是2000,哪里错了,求解答

程序调整后如下

#include <math.h>
#include <stdio.h>

int main()

{
    long double a, i, n, k;
    int max = 63;

    n = 0;

    for (i = 1, a = 1; a <= max; a++)

    {

        n = n + i;
        i = i * 2;

        printf("%Lf\n", n);
    }

    return 0;
}

img