C N数据的比较
我要比较浮点型的N个数据。此比较必须在公差范围内进行 这意味着,如果2个数据(N个数据内)之间的差异小于或等于公差,则这2个数据将被视为有效,我得到一个数据,否则,如果差异大于公差,则数据无效 你知道吗 这是我的密码: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
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");
}
}