0

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

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

4

6 回答 6

2

比较浮点数的最简单方法是使用<运算符,就像这样

if(float1 < float2)
     printf("%f < %f\n", float1, float2);
于 2011-10-13T15:40:51.150 回答
1

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

使用 FLT_EPSILON 存在用于浮点数。

有关演示该技术的示例函数,请参见此答案

于 2011-10-13T15:55:23.100 回答
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;
}
于 2011-10-13T15:54:56.603 回答
0

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

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

等等

由于您在浮点数组中有值,因此我将执行以下操作:

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;
}
于 2011-10-13T15:39:38.913 回答
0

如果您想找到最大的数字,为什么还要担心比较是否相等?

于 2011-10-13T15:39:43.183 回答
0

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

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

于 2014-04-15T06:19:33.387 回答