前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术日志挑战——第7天:0730

技术日志挑战——第7天:0730

原创
作者头像
Arya
发布2024-07-30 17:29:58
800
发布2024-07-30 17:29:58

技术总结:

今天解决了算法代码中的几个bug,

第一是之前用一个float类型的值接收两个float值的加减乘除,导致实际计算过程中出现浮点数的精度问题,而引起程序异常退出,然后改成用double类型进行接收才把问题解决。

另外一个是之前对比两个float类型的值是否相等用了qt提供的fuzzy方法,发现有些过于邻近的值被判定为同一个,导致计算错误,然后改成了相差小于1e-6就认为是同一个点。

学习笔记:

qt中的double和float精度问题

在C++中,floatdouble是两种常用的浮点数类型,但它们的表示范围和精度有所不同。以下是它们的一些关键区别:

float

  • 大小:通常占用4个字节(32位)。
  • 精度:大约7位十进制数字。
  • 范围:大约 1.2E-383.4E+38
  • 用途:适用于空间和精度要求不高的场景,例如图形处理。

double

  • 大小:通常占用8个字节(64位)。
  • 精度:大约15-16位十进制数字。
  • 范围:大约 2.3E-3081.7E+308
  • 用途:适用于需要更高精度和更大范围的场景,例如科学计算。

解释

  1. 浮点数值
    • 输出表明float类型只能精确到约7位小数,而double类型可以精确到约15-16位小数。
  2. 精度和范围
    • 使用std::numeric_limits类,可以获取浮点数类型的精度和范围信息。
    • digits10成员表示该类型可以精确表示的十进制位数。
    • minmax成员表示该类型可以表示的最小值和最大值。
  3. 潜在的精度差异
    • 在实际应用中,特别是涉及大量浮点运算或需要高精度的计算时,double 类型通常比 float 类型更可靠。

通过这些信息,你可以更好地理解floatdouble的区别,并根据具体需求选择合适的浮点数类型。

在Qt中,使用qDebug()来输出浮点数时,你可以设置输出格式,以确保小数点后有固定的位数。为了实现这一点,你可以使用QTextStream来格式化输出。以下是一个示例,展示如何在qDebug()中输出小数点后固定10位的小数:

使用 QTextStream 格式化输出

  • 创建两个 QString 对象 floatOutputdoubleOutput,用于存储格式化后的字符串。
  • 创建两个 QTextStream 对象 floatStreamdoubleStream,分别与 floatOutputdoubleOutput 关联。

设置 QTextStream 的格式

  • 使用 setRealNumberNotation(QTextStream::FixedNotation) 设置为定点表示法。
  • 使用 setRealNumberPrecision(10) 设置输出精度为10位小数。

将浮点数写入 QTextStream

  • floatValdoubleVal 写入各自的 QTextStream

使用 qDebug() 输出格式化后的字符串

  • floatOutputdoubleOutput 输出。
代码语言:java
复制
// Two float values
        float num1 = 1.2345678f;
        float num2 = 9.8765432f;

        // Multiplication results
        float resultFloat = num1 * num2;
        double resultDouble = num1 * num2;

        // Using QTextStream to format the output
        QString floatOutput, doubleOutput;
        QTextStream floatStream(&floatOutput);
        QTextStream doubleStream(&doubleOutput);

        floatStream.setRealNumberNotation(QTextStream::FixedNotation);
        floatStream.setRealNumberPrecision(10);
        doubleStream.setRealNumberNotation(QTextStream::FixedNotation);
        doubleStream.setRealNumberPrecision(10);


//        floatStream << num1;
//        doubleStream << num2;

//        qDebug() << "num1: " << floatOutput;
//        qDebug() << "num2: " << doubleOutput;

        floatStream << resultFloat;
        doubleStream << resultDouble;

        qDebug() << "float: " << floatOutput;
        qDebug() << "double: " << doubleOutput;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技术总结:
  • 学习笔记:
  • qt中的double和float精度问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档