关于程序中浮点数产生的误差的分析

这是我人生中的第一篇博客,肯定会有许多问题和错误,还请大家及时指点。

下面就在C语言程序中运用浮点数时产生的误差进行一些分析,首先先看一个程序:

# include<stdio.h>
int main()
{
 float a=123456789;
 printf("%f\n",a);
 return 0;
}

我们在进行预测时预测的结果(理论值)为123456789.000000,但是实际的运行结果(实际值)却为123456792.000000,

   这就说明程序在运行时产生了一定的误差,而这个误差不可避免。这就像我们生活中用到的时钟一样,时间长了就会有些不准确了。

    于是我们在写程序时就要重新定义一个变量,来减少实际值与理论值之间的误差,在C语言程序中表示为:理论值-误差<实际值&&实际值<理论值+误差,在程序中我们称误差为精度。

   下面说一个例子,这个程序是求二元一次方程组的根的,

关于程序中浮点数产生的误差的分析

关于程序中浮点数产生的误差的分析

   从这个例子中我们可以看出精度EPS与定义值double d之间的关系

if(EPS<=d&&d>EPS)
{
 r1=r2=-c/b;
 printf("r1=%f,r2=%f\n",r1,r2);
}
else if(d<-EPS)
{
 printf("无实数根\n");
}
else if(-EPS<=d&&d<=EPS)
{
 r1=r2=-2b/(2*a);
 printf("r1=%f,r2=%f\n",r1,r2);
}

这样我们才能避免实际值与理论值之间差距太大。

初次写博客,理论知识多有不足,希望大家多多指点!