【问题标题】:How to compare float variable with double in C?如何在C中比较浮点变量和双精度?
【发布时间】:2020-01-19 15:13:27
【问题描述】:
float num1 = 1;

if (num1 == 1)
{
     printf("Yes, it is equal!!\n");
}
else
{
     printf("No, it is not equal\n");
}

输出 --> 是的,它是相等的!

float num1 = 1.2;

if (num1 == 1.2)
{
    printf("Yes, it is equal!!\n");
}
else
{
    printf("No, it is not equal\n");
}

输出 --> 不,不等于

但是为什么呢? 请详细说明。

【问题讨论】:

标签: c floating-point int compare


【解决方案1】:

不管你的头衔如何,都无法与任何int 值进行比较。

num == 1.2num 中的float 值与1.2double 值进行比较。

1.2 在您的C 实现中转换为double 时,它会转换为最接近的可表示值。由于您的 C 实现使用基于二进制的浮点系统,它不能准确表示 1.2,并且在转换中存在小错误。

float num1 = 1.2; 中,由1.2 产生的double 值再次转换为float。由于float 的精度低于double,因此误差更大。结果是floatnum1 不等于双精度1.2

因此,比较 num1 == 1.2 的结果为 false。

【讨论】:

    【解决方案2】:

    在精确比较浮点数时要非常小心。并非所有值都可以精确地表示为浮点数,因为并非所有值都可以表示为 2 的幂(正或负)分量的有限总和。同样的问题是双倍。

    对于您的问题没有好的和通用的解决方案,它很大程度上取决于可能值的种类、预期的准确性等。

    您可能应该转换为整数值,例如将浮点数乘以 10 的幂,然后转换(舍入)为 int,最后进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2011-04-18
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多