C++学习记录之浮点数相等比较
用"=="来比较两个浮点数(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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。