算自然对数e的程序问题请教

时间:2023-01-15 18:35:46
#include"stdio.h"
#include"stdlib.h"
main()
{
long int i;
double e=0.0;
unsigned long int n=1;
for(i=1;i<=1000;i++)   
 {   
 e+=(double)(1.0/n);
 n*=i;
 }
printf("%.16lf",e);
system("pause");
}
运行结果为1.#inf0000
下面这个
#include"stdio.h"
#include"stdlib.h"
main()
{
long int i;
double e=0.0;
double n=1;
for(i=1;i<=1000;i++)   
 {   
 e+=(double)(1.0/n);
 n*=i;
 }
printf("%.16lf",e);
system("pause");
}
正确运行,区别就在于 double 或者 unsigned long int 上面,那位高手讲讲为什么吧,谢谢了

1 个解决方案

#1


for(i=1;i<=1000;i++)   
 {   
 e+=(double)(1.0/n);
 n*=i;
 }
当循环到 i=33 时 n=2147483648;
你可以试着输出 (i+1)*n 的值!

#1


for(i=1;i<=1000;i++)   
 {   
 e+=(double)(1.0/n);
 n*=i;
 }
当循环到 i=33 时 n=2147483648;
你可以试着输出 (i+1)*n 的值!