求e的近似值,面对数据溢出和数据异常1.#INF...

#include<stdio.h>
#include<math.h> 
long f(long n);
int main()
{
	long n,i;
	double s = 1.0;
	double d;
	scanf("%ld",&n);
	if(n > 1000||n < 0){
		return 0;
	}
	for(i = n;i > 0;i--){
		d = 1.0/f(i);
		s += d;
	}
	printf("%.8lf",s);
	return 0;
}
long f(long n)
{
	long i,f = 1;
	for(i = n;i > 0;i--){
		f *= i;
	}
	return f;
}

   

    出现1.#INF000情况: 

    可能1:对于条件端子的初始设置错误,出现了分母为零而使式子无意义的情况

    可能2:变量被无限放大,超出了float或double能表示的范围

    解决:换另一个变量进行保存

 

更改:

#include<stdio.h>
double f(int n);
int main()
{
	int n,i;
	double s = 1.0;

	scanf("%d",&n);
	if(n > 1000||n < 0){
		return 0;
	}
	for(i = n;i > 0;i--){
		s += 1.0/f(i);
	}
	printf("%.8lf",s);
	return 0;
}
double f(int n)
{
	double f = 1;
    int i;
	for(i = n;i > 0;i--){
		f *= i;
	}
	return f;
}

此题就是改成double,函数返回类型为double,存储够

 

 

(1)1.#INF: 表示无穷小
(2)-1.#IND: 做除法时除数为0
(3)1.#INF000:正无穷大
(4)-1.#INF000:负无穷大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值