#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 的值!
{
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 的值!
{
e+=(double)(1.0/n);
n*=i;
}
当循环到 i=33 时 n=2147483648;
你可以试着输出 (i+1)*n 的值!