比较C中的浮点值

时间:2011-10-13 15:35:19

标签: c floating-point floating-point-conversion

我想比较浮点值以确定列表中的最大数字。浮点数的精度是固定的,小数点后是6。

我应该只将它们作为整数进行比较,如果它们相等,那么去挖掘小数点后的值吗?

6 个答案:

答案 0 :(得分:2)

比较浮点数的最简单方法是使用<运算符,如此

if(float1 < float2)
     printf("%f < %f\n", float1, float2);

答案 1 :(得分:1)

使用DBL_EPSILON作为接近双打的基础。

使用浮点数存在FLT_EPSILON。

请参阅this answer了解演示该技术的示例函数。

答案 2 :(得分:0)

这取决于你没有告诉我们的事情。

  • 这些号码是如何提供给您的?作为字符串,还是已经在内存中(浮点数组/双数组)?
  • 他们有多大?有没有最大的边界,以便有一定的精度?即,如果这个数字是1亿,那么6位小数是否相关?
  • 是否可以失去精确度?

由于您在float数组中有值,我会执行以下操作:

float biggest(float * values, int num)
{
    int i;
    float curmax;
    if (num == 0) return NAN;
    curmax = values[0];
    for (i=1; i < num; i++) {
        if (values[i] > curmax) curmax = values[i];
    }
    return curmax;
}

答案 3 :(得分:0)

如果你想找到最大的数字,为什么你需要担心比较平等?

答案 4 :(得分:0)

执行此操作的代码如下所示:

float MinFloatArray(float *a, int n)
{
    int i;
    float result = MAX_FLOAT;
    for (i=0; i<n; i++)
        if (a[i]<result)
            result = a[i];
    return result;
}

答案 5 :(得分:0)

以下文章提供了比较浮点值的各种替代方案。 http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

通常,找到浮点数之间的差异并检查差异是否在精度限制范围内,有助于比较浮点数。 但正如前面提到的那样,没有完美的答案和实现,因为相邻浮点数之间的差异随着幅度而变化。因此,如果您知道程序将使用的值范围,那么您可以选择适当的实现进行比较。