我在Python中有这个代码,它工作正常。这个代码的思想是根据阈值计算数组中每个值的重复。Python代码的输出是[value,repetition]
[1.2, 3, 2.4, 1, 2.5, 1, 2.3, 1, 2.4, 1, 8.5, 2, 8.9, 1, 9.11, 1]
个字符
这是C代码,C代码的输出是:
1.100000 2 1.200000 1 2.500000 2 2.300000 1 2.400000 1
8.600000 1 8.500000 1 8.900000 1 9.110000 1
int dif(float x,float y,float sigma1){
int res=0;
if(fabsf(x-y) <= sigma1)
res=1;
return res;
}
void RL(){
float text [] = {1.1,1.1,1.2,2.4,2.5,2.3,2.4,8.6,8.5,8.9,9.11} ;
int n = sizeof(text)/sizeof(text[0]);
float th =0.1;
float num[30]; int nc = 0;
int cou[30]; int nc1= 0;
int index=0;
int unt=1;
while (index<(n)){
if ( (index==(n-1)) || (dif(text[index],text[index+1],th)!=1) ) {
cou[nc] = unt; nc=nc+1;
num[nc1] = text[index]; nc1=nc1+1;
unt=1;
}
else{
unt=unt+1;
}
index=index+1 ;
}
for(int i=0; i<nc;i++){
printf(" %3f %d \n ",num[i],cou[i]);
}
}
的字符串
为什么C代码将值处理为int而不是float(将重复计算为int)?如何解决这个代码中的问题?注意:如果我使用int数组,C代码可以正常工作。
1条答案
按热度按时间xmd2e60i1#
从@user3386109的评论中,我们应该考虑Python和C代码中float和double的区别。一种方法是通过添加一个小的Epsilon来补偿(1.2-1.1)不完全是0.1的事实。例如,我将使用10 e-6的Epsilon(您可以使用更小的数字)。
下面是修改后的Python代码:
字符串
这次运行的结果与原始代码不同:
型
下面是修改后的C代码:
型
C代码的结果与更改后的Python相同:
型
如果你用调试器运行这两段代码,你会发现dif()函数中的'z'值在C和Python之间的第三次迭代中是不同的:
型
通过在dif()函数中使用小的Epsilon,您将在两种语言中获得相同的结果。