加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – qFuzzyCompare如何在Qt中工作

发布时间:2020-12-16 03:42:04 所属栏目:百科 来源:网络整理
导读:有什么区别: if( a == b ) 和 if( qFuzzyCompare(a,b) ) 假设变量a和b是: a = 1234.5678b = 1234.5678 注意:我问,因为我在Qt中比较双打时遇到问题,我想了解qFuzzyCompare的工作原理. 解决方法 qFuzzyCompare()的 official documentation并没有真正解释为
有什么区别:
if( a == b )

if( qFuzzyCompare(a,b) )

假设变量a和b是:

a = 1234.5678
b = 1234.5678

注意:我问,因为我在Qt中比较双打时遇到问题,我想了解qFuzzyCompare的工作原理.

解决方法

qFuzzyCompare()的 official documentation并没有真正解释为什么会使用它,但通常比较浮点值被认为是一种不好的做法,因为可能会发现两个看似相同的浮点变量由于舍入误差而不同.您可以阅读有关浮点变量 here的这个和其他陷阱的更多信息.

当Qt5.6.0附带的qFuzzyCompare()的源代码分别用于Qt5.6.0(保持CTRL并单击该函数以在QtCreator中看到它)时,可以推断出它试图减少不准确的可能性.平等测试的方式:

Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1,double p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1,double p2)
{
    return (qAbs(p1 - p2) * 1000000000000. <= qMin(qAbs(p1),qAbs(p2)));
}

Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(float p1,float p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(float p1,float p2)
{
    return (qAbs(p1 - p2) * 100000.f <= qMin(qAbs(p1),qAbs(p2)));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读