int main() " />

小言_互联网的博客

浮点数的误差问题 1(C语言)

331人阅读  评论(0)

先来看一段程序:

int main()
{
	double n=0.01;
	double tmp=0;
	for(int i=0;i<40000000;i++)
	{
		tmp+=n;
	}
	printf("%f",tmp);
	return 0;
}


从这段程序中可以明显看出编译结果产生了误差,所以浮点数的计算中是存在误差的。

#include<stdio.h>

int main()
{
	float a=1234456;
	float b=1234456.000001;
	if(a==b)
	{
		printf("相等");
	}
	return 0;
}

上面这个程序输出了相等,所以浮点数在计算中,应谨慎使用,那么我们如何减少误差呢?我们用一元二次方程求解的程序来解释:

#include<stdio.h>
#include<math.h>
#define EPS 0.000001

void Solution(double a,double b,double c)
{
	double disc=b*b-4*a*c;
	if(a>=-EPS&&a<=EPS)
	{
		printf("%f",-b/c);
	}
	else if(disc>=-EPS&&disc<=EPS)
	{
		printf("r=%f",-b/2*a);
	}
	else if(disc>EPS)
	{
		printf("r1=%f",(-b+sqrt(disc))/2*a);
		printf("r2=%f",(-b-sqrt(disc))/2*a);
	}
	else if(disc<-EPS)
	{
		printf("此方程无解");
	}
}
int main()
{
	double a,b,c;
	Solution(1,-2,1);
	return 0;
}

我们用宏来定义一个我们可接受的误差范围来尽量减少误差。


转载:https://blog.csdn.net/weixin_44018317/article/details/102571150
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场