牛骨文教育服务平台(让学习变的简单)
博文笔记

C++学习记录之浮点数相等比较

创建时间:2015-10-10 投稿人: 浏览次数:542

用"=="来比较两个浮点数(float或double)是否相等,返回真值完全是不确定的。计算机对浮点数的计算原理是只保证必要精度内正确即可。但是可以用“>”,"<"比较浮点数的大小。

如以下比较fTemp是否等于0.9是不正确的,结果是未知的。

float fTemp=0.9;
if(0.9==fTemp)
{
		
}

以下是我封装的比较函数

float fTemp=0.9;
float CServerGameDesk::ChangePondPro(float fDegree)
{
	float EPSINON = 0.00001;//float的比较精度,如果是double建议精度为0.00000001
	float _Adegree=fDegree-0.1 ;//拿比较值和目标值的差值和精度去比较来判断是否相等
	float _Bdegree=fDegree-0.2 ;
	float _Cdegree=fDegree-0.3 ;
	float _Ddegree=fDegree-0.4 ;
	float _Edegree=fDegree-0.5 ;

	float fTemp=0.9;
	if((_Adegree>= - EPSINON) && (_Adegree<= EPSINON))//和精度比较来判断是否相等
	{
		fTemp=0.9;
	}
	else if((_Bdegree>= - EPSINON) && (_Bdegree<= EPSINON))
	{
		fTemp=0.7;
	}
	else if((_Cdegree>= - EPSINON) && (_Cdegree<= EPSINON))
	{
		fTemp=0.5;
	}
	else if((_Ddegree>= - EPSINON) && (_Ddegree<= EPSINON))
	{
		fTemp=0.3;
	}
	else if((_Edegree>= - EPSINON) && (_Edegree<= EPSINON))
	{
		fTemp=0.1;
	}
	return fTemp;
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。