c – qFuzzyCompare如何在Qt中工作

c – qFuzzyCompare如何在Qt中工作,第1张

概述有什么区别: 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.5678b = 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)));}
总结

以上是内存溢出为你收集整理的c – qFuzzyCompare如何在Qt中工作全部内容,希望文章能够帮你解决c – qFuzzyCompare如何在Qt中工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1257863.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存