技术日志挑战——第6天:0729

2024-07-29 18:51:58 浏览数 (1)

第2天

技术总结:

今天是周一,主要开了周会,然后老板看了一下软件开发的进度。总结一句话,就是觉得我们干的慢,说是要再给一个月的期限,如果还是搞不出来,那就麻烦大了,估计要采取一些措施,比如降个工资啥的,尴尬了。目前我应该没有被踢走的风险,毕竟目前团队里面搞软件开发的,我的技术还是比较拔尖的那部分,所以加油搞吧。这周要出个好的结果。

学习笔记:

qt中浮点类型的大小比较-----qFuzzyCompare 的作用

qFuzzyCompare 是 Qt 提供的一个函数,用于比较两个浮点数是否相等。由于浮点数在计算机中的表示存在精度问题,直接使用 == 运算符比较两个浮点数可能会因为微小的舍入误差而导致不准确的结果。qFuzzyCompare 函数通过引入一个小的容差范围来解决这个问题,使得在一定精度范围内相等的浮点数被认为是相等的。

qFuzzyCompare 的方法

qFuzzyCompare 有两个重载版本:

  1. bool qFuzzyCompare(double p1, double p2)
  2. bool qFuzzyCompare(float p1, float p2)

使用示例

代码语言:java复制
#include <QDebug>
#include <cmath>

int main() {
    double a = 0.1   0.2;
    double b = 0.3;

    // 直接比较可能会因为精度问题导致不准确的结果
    qDebug() << (a == b); // 输出: false

    // 使用 qFuzzyCompare 进行比较
    qDebug() << qFuzzyCompare(a, b); // 输出: true

    return 0;
}

注意事项

  1. 精度问题qFuzzyCompare 函数在比较时会考虑一个小的容差范围,但这个范围是有限的。对于非常大或非常小的浮点数,仍然可能出现比较不准确的情况。
  2. 零值比较qFuzzyCompare 函数在比较零值时需要特别注意。Qt 还提供了 qFuzzyIsNull 函数来专门处理零值的比较。

qFuzzyIsNull 函数

qFuzzyIsNull 用于检查一个浮点数是否接近于零:

代码语言:java复制
bool qFuzzyIsNull(double d)
bool qFuzzyIsNull(float f)

使用示例:

代码语言:java复制
#include <QDebug>

int main() {
    double a = 1e-10;

    qDebug() << (a == 0.0); // 输出: false
    qDebug() << qFuzzyIsNull(a); // 输出: true

    return 0;
}

总结

qFuzzyCompareqFuzzyIsNull 是 Qt 提供的用于处理浮点数比较的实用函数,可以有效避免由于浮点数精度问题导致的比较错误。在需要比较浮点数的场景中,推荐使用这些函数来提高代码的健壮性和准确性。

0 人点赞