C N数据的比较

C N数据的比较,c,C,我要比较浮点型的N个数据。此比较必须在公差范围内进行 这意味着,如果2个数据(N个数据内)之间的差异小于或等于公差,则这2个数据将被视为有效,我得到一个数据,否则,如果差异大于公差,则数据无效 你知道吗 这是我的密码: float mytab[N]; int i,j,index=0; for (i = 0; i < N-1; i++) { for (j = i+1; j < N; j++) { if(tab[i].valid && t

我要比较浮点型的N个数据。此比较必须在公差范围内进行

这意味着,如果2个数据(N个数据内)之间的差异小于或等于公差,则这2个数据将被视为有效,我得到一个数据,否则,如果差异大于公差,则数据无效

你知道吗

这是我的密码:

 float mytab[N];
 int i,j,index=0;
 for (i = 0; i < N-1; i++)
 {
   for (j = i+1; j < N; j++)
    {
      if(tab[i].valid && tab[j].valid)
       {
          if ( ABS(tab[i]-tab[j])<= toleance)
            {
            mytab[index] = tab[i];
            index++;    
            } 
       }
    }
  }

//after i search the min value of mytab which constain a 
  valid value within tolerance.
在本例中,如果我们基于公差,我们可以选择(20.005或20.017或20.1)或(21.20或21.25)。
但如果我们以多数票为基础,我们选择20。。。请说清楚,而不是21…

。根据数字集的不同,可以创建共享此属性的多个(不同且不相交)子集。 如果要创建最大的子集,其值在原始超集的每个值的公差范围内,则该子集是唯一的,但这样做是错误的。对于集合中的每个值,如果它在集合中每个单个值的公差范围内,则应该。只有在核对了每一个数字之后,你才能把它包括进去

像这样:

float mytab[N];
int marker=1; //marker that will tell if any number is outside tolerance range of some other element (then marker will be converted to 0
 int i,j,index=0;
 for (i = 0; i < N; i++)
 {
   marker=1 //for every new number, reset marker
   for (j = 0; j < N; j++)
    {
      if(tab[i].valid && tab[j].valid)
       {
          if ( fabs(tab[i]-tab[j])> toleance)
            {
            marker=0;
            } 
       }
    }
    if(marker)
      {
      mytab[index]=tab[i]; index++; //marker will only be 1 if the number is within tolerance range of every element
      }
  }
float mytab[N];
int标记=1//指示任何数字是否超出某个其他元素的公差范围的标记(然后标记将转换为0
int i,j,指数=0;
对于(i=0;itoleance)
{
标记=0;
} 
}
}
如果(标记)
{
mytab[index]=tab[i];index++;//如果数字在每个元素的公差范围内,则标记仅为1
}
}

当然,这是一个非常不完善的代码。最大的范围将在候选编号和集合中最小和最大的编号之间。因此,我要做的是对列表进行排序(或者简单地找出集合中最大和最小的编号),并将每个元素与这两个元素进行比较。如果它们在这些元素的范围内,则与其他所有元素进行比较。因此,对每个数字进行两次比较,而不是n(或者,如果您在上面的代码中比我聪明一点,就像您试图排在第一位一样,则为n/2)如果我理解你的基本问题,你需要比较两个浮点数。我认为你与ABS很接近……但是你需要浮点数版本
fabs
,可在
math.h
中找到C99

#include <stdio.h>
#include <math.h>

int main (void)
{
    float f1 = 1.00001;
    float f2 = 1.00003;
    float tol= 0.00010;

    if (fabs(f1 - f2) <= tol) {
        puts("Test1: f1 and f2 are equal-ish.");
    } else {
        puts("Test1: f1 and f2 are not equal-ish.");
    }

    tol= 0.0000001;
    if (fabs(f1 - f2) <= tol) {
        puts("Test2: f1 and f2 are equal-ish.");
    } else {
        puts("Test2: f1 and f2 are not equal-ish");
    }
}

你我有主意。但是你能提供你的尝试吗?如果你至少尝试了一些东西,我可以帮助你。是的,我尝试了,但我没有找到一个通用算法。请用这种尝试编辑你的帖子。你能提供一个小样本输入和你期望的输出吗?我的问题不在ABS中,而是要确定在一个l之间哪个值是正确的我想用一个快速算法检查每两个值。
#include <stdio.h>
#include <math.h>

int main (void)
{
    float f1 = 1.00001;
    float f2 = 1.00003;
    float tol= 0.00010;

    if (fabs(f1 - f2) <= tol) {
        puts("Test1: f1 and f2 are equal-ish.");
    } else {
        puts("Test1: f1 and f2 are not equal-ish.");
    }

    tol= 0.0000001;
    if (fabs(f1 - f2) <= tol) {
        puts("Test2: f1 and f2 are equal-ish.");
    } else {
        puts("Test2: f1 and f2 are not equal-ish");
    }
}