C语言中浮点数精度问题分析
2015-02-13周冠方
湖北工业职业技术学院学报 2015年3期
关键词:程序
周冠方
(郧阳师范高等专科学校组织人事部,湖北十堰420000)
C语言中浮点数精度问题分析
周冠方
(郧阳师范高等专科学校组织人事部,湖北十堰420000)
通过实例直观地描述了C语言中由于计算机存储数据方式的不同而造成的数据误差,并对误差产生的原因进行了分析,解读出C语言中浮点型数据的不同存储方式,最后给出几点建议。
C语言;数据精度;浮点型数据;相对误差
1 引言
C语言程序设计的基本数据类型包含整型和浮点型两类。在计算机中,实数特别是小数形式表示的数都是以浮点型数据来进行存储的。但是对于浮点型的数据,在进行各种运算时,因为计算机的二进制存储特性,会导致出现精度丢失的现象。这种现象直接影响到程序结果的准确性和可靠性。
2 C语言中数据类型转换带来的影响
先来看一个简单的例子:需要求解A=4/5的值,这个结果很简单,A=0.8。而在C语言中,我们写出它的计算程序:
Main()
{
Float A;
A=4/5;
Printf(“A=%f\n”,A);
Return 0;
}
结果:A=0.000000
从算法的角度来看这个程序没有问题,但是最终运行的结果却和我们的理论值完全不相符。这是为什么呢?
分析:在此程序中两操作数4和5均为整型,运算结果应该为0.8,但是在C语言程序编写中有这样一个规则,C语言中计算的源数据为整形数据,最终输出结果也应该为整形数据。“4/5”的结果0.8在C语言中会被转换后得到一个int型的中间变量,它的值等于“4/5”的整数部分,其小数部分则被进行截尾操作,即舍弃整个小数部分,最终存储值为0。程序将这个整型的运算结果赋给A这个float型变量,将其强制转换为float型输出,所以最终运算结果成了A=0.000000。……
登录APP查看全文
