贵州网站开发,七牛wordpress插件,无需下载国外黄冈网站推广,公司网站推广计划书我们定义一个float类型的数据a#xff0c;赋值为123456789并输出#xff1a;
int main()
{float a;a 123456789;printf(%f\n,a);return 0;
}输出结果为#xff1a; 由此可以看出#xff0c;程序输出的结果并不是其被赋予的值。即说明了浮点数存在一定的误差。… 我们定义一个float类型的数据a赋值为123456789并输出
int main()
{float a;a 123456789;printf(%f\n,a);return 0;
}输出结果为 由此可以看出程序输出的结果并不是其被赋予的值。即说明了浮点数存在一定的误差。而这个误差与其本身的精度有关。 首先浮点数在计算机当中的二进制表达方式就决定了大多数浮点数都是无法精确表达的。现在的计算机大部分都是数字计算机不是模拟机数字机的离散化的数据表达方法自然无法精确表达大部分的数据量。 其次计算机浮点数的精度在单精度float类型下只有7位在进行浮点运算的时候这个精度往往会导致运算的结果和实际期望的结果之间有误差。下面我们通过具体的实例来理解精度的问题。 已知某两栋建筑物之间的实际距离为200m用一个误差范围为1m的测量工具进行测量得到4组数据。分别为199.3m189.7m200.3m201.5m根据误差所允许的范围来看其中只有199.3m和200.3m这两个数据是有效的。也就是在误差范围为1m的情况下我们认为在(200-1)m~(2001)m即199m~201m范围内才是有效的数据。
理解了这个例子接下来我们来看浮点数与0的比较。 通常情况下C语言一般将浮点数的误差确定为0.000001。因此可以将误差进行宏定义#define EPS 0.000001接下来是浮点数与0比较的几种表达 判断a是否等于0if(-EPS a a EPS) 判断a是否大于0if(a EPS) 判断a是否小于0if(a EPS) 应该判断a是否位于0附近的一个很小的区间[-EPS,EPS]中或者说a的绝对值小于等于一个很小的数EPS可定义EPS1e-6 即用iffabs(a)EPS) /* 正确的实数与0的比较方法 */ 于是我们定义EPS1e-6
#define EPS 1e-6