C语言中关于类型的问题

题目是1+x/1!+x^2/2!+......+x^n/n!
x,n是用户自己输入的
刚开始是这样
#include
#include

int main()
{
int i_I=1,i_N,i_Term=1;
double d_X,d_Term=1,d_Sum=1;

scanf("%lf",&d_X);
scanf("%d",&i_N);

while(i_I<=i_N)
{
    d_Term*=d_X;
    i_Term*=i_I;
    d_Sum+=d_Term/i_Term;
    i_I++;
}
printf("%lf",d_Sum);
return 0;

}
然后输入7和27就会输出特别大的值

#include
#include

int main()
{
int i_I=1,i_N;
double d_X,d_Term=1,i_Term=1,d_Sum=1;

scanf("%lf",&d_X);
scanf("%d",&i_N);

while(i_I<=i_N)
{
    d_Term*=d_X;
    i_Term*=i_I;
    d_Sum+=d_Term/i_Term;
    i_I++;
}
printf("%lf",d_Sum);
return 0;

}

这样改就正确了
为什么啊QAQ新手不懂谢谢大家

double 和 int 精度不一样。c语言除法运算得到的结果和被除数有关系。

http://blog.sina.com.cn/s/blog_6cebe3890100s8sk.html

i_Term溢出了 。