比较C中的浮点值

比较C中的浮点值,c,floating-point,floating-point-conversion,C,Floating Point,Floating Point Conversion,我想比较浮点值以确定列表中的最大数字。浮点的精度是固定的,小数点后是6 我是否应该将它们作为整数进行比较,如果它们相等,则去挖掘小数点后的值?这取决于您没有告诉我们的内容 这些数字是如何提供给您的?作为字符串,还是它们已经在内存中(浮点数组/双数组) 它们有多大?为了达到一定的精度,有没有最大的界限?也就是说,如果数字是,比如说,1亿,那么6位小数是否相关 失去精度可以吗 等等 由于您有浮点数组中的值,我将执行以下操作: float biggest(float * values, int n

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


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

这取决于您没有告诉我们的内容

  • 这些数字是如何提供给您的?作为字符串,还是它们已经在内存中(浮点数组/双数组)
  • 它们有多大?为了达到一定的精度,有没有最大的界限?也就是说,如果数字是,比如说,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;
}
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;
}
float最大值(float*值,int num)
{
int i;
浮动curmax;
如果(num==0)返回NAN;
curmax=值[0];
对于(i=1;icurmax)curmax=值[i];
}
返回curmax;
}

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

  • 这些数字是如何提供给您的?作为字符串,还是它们已经在内存中(浮点数组/双数组)
  • 它们有多大?为了达到一定的精度,有没有最大的界限?也就是说,如果数字是,比如说,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;
}
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;
}
float最大值(float*值,int num)
{
int i;
浮动curmax;
如果(num==0)返回NAN;
curmax=值[0];
对于(i=1;icurmax)curmax=值[i];
}
返回curmax;
}

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

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

比较浮动的最简单方法是使用
比较浮动的最简单方法是使用
代码执行此操作,如下所示:

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;
}
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;
}
float-MinFloatArray(float*a,int-n)
{
int i;
浮动结果=最大浮动;

对于(i=0;i代码,执行此操作的代码如下所示:

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;
}
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;
}
float-MinFloatArray(float*a,int-n)
{
int i;
浮动结果=最大浮动;

对于(i=0;i使用DBL_EPSILON作为接近双倍的基础

使用FLT_EPSILON exists表示浮点数


有关演示该技术的示例函数,请参阅。

使用DBL_EPSILON作为基础,以确定需要接近double的程度

使用FLT_EPSILON exists表示浮点数


有关演示该技术的示例函数,请参阅。

以下文章提供了有关比较浮点值的各种替代方法。。

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

下面的文章提供了关于比较浮点数的各种备选方案价值观

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

您所指的确切含义是什么“将它们作为整数进行比较,如果它们相等,则在小数点后挖取值”?我的意思是,首先使用“==”号进行比较,如果它们仍然相同,则执行其他操作(不确定是什么)。如果它们相同,则它们是相同的。然后您还会做什么?尝试放置一些代码行,以向我们展示这些“浮动”是什么“是。你所说的“将它们作为整数进行比较,如果它们相等,则在小数点后挖掘值”是什么意思?我的意思是,首先使用“==”号进行比较,如果它们仍然相同,则执行其他操作(不确定是什么)。如果它们是相同的,那么它们是相同的。那么你还会做什么?试着放几行代码,告诉我们这些“浮动”是什么是。数字在浮点数组中。数字通常不大,但没有指定用户定义的最大边界。6位小数总是相关的。不,失去精度是不好的。好的,因为你有一个浮点数组,你可能已经丢失了(不是loost)精度。在这种情况下,我只需定义一个变量并在列表上迭代,每当发现一个大于该变量的值时更新该变量。数字位于浮点数组中。数字大多不大,但没有指定用户定义的最大边界。6个小数总是相关的。不,放松精度是不好的.好的,由于您有一个浮点数组,您可能已经丢失了(不是loost)精度。在这种情况下,我只需定义一个变量并在列表中迭代,每当发现一个大于该变量的值时,就更新该变量。最高精度是多少?<运算符比较这两个浮点值。@Harman浮点数是完全有序的。给定任意两个非特殊数字a和b,正好是以下其中一个s true,ab。不涉及公差。高达浮点值固有的精度。这主要是5到6位小数。高达什么精度,<运算符比较两个浮点值。@Harman浮点数是完全有序的。给定任意两个非特殊数字a和b,以下正好一个为true,ab。不涉及公差。Up浮点值固有的精度。这主要是5到6位小数。@Harman,我不明白。你有浮点值吗