输出“-1.#IND00”????

gxh870919 2009-12-03 12:45:54
不知道为什么下面的程序输出的数据里含有部分的-1.#IND00
开始我以为是分母为0的原因,我就在分母上加了一个DBL_MIN,但是还是出现-1.#IND00,很迷惑。
希望各位老师能给看看:


/*使用fcm算法把三维的数据聚类。
*数据data数目是n=5,类数c=4,模糊度为m=2。
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
main(){
int i,j,k,iter,m,mm; //i,j,k,mm都是中间变量,iter是代数,m是模糊度
double fun_obj,dist_squ,distance_rate_squ,distance_up_squ,distance_down_squ,up,down;
double sum_row[5],data[5][3],u[5][4],p[4][3];

m=2;
//随机产生5个三维数据
srand((unsigned)time(0));
for(i=0;i<5;i++)
for(k=0;k<3;k++){
data[i][k]=rand()/(double)(RAND_MAX);
}

//在训练样本集中随机选取c(4)个聚类中心p
for(j=0;j<4;j++){
i=rand()%5; //选择数据集中的数据作为聚类中心
for(k=0;k<3;k++){
p[j][k]=data[i][k];
}
if(j!=0){
for(i=0;i<j;i++){
if(p[i][0]==p[j][0]&&p[i][1]==p[j][1]&&p[i][0]==p[j][2]){
j--;
break;
}
}
}
}

//计算更新的模糊隶属度
for(i=0;i<5;i++)
for(j=0;j<4;j++){ //计算第i个数据对4个类的类属度
u[i][j]=0.0;
for(mm=0;mm<4;mm++){ //求分母下的求和号
distance_up_squ=0.0;
distance_down_squ=0.0;
for(k=0;k<3;k++){
distance_up_squ=distance_up_squ+pow((data[i][k]-p[j][k]),2);
distance_down_squ=distance_down_squ+pow((data[i][k]-p[mm][k]),2);
}
distance_rate_squ=distance_up_squ/(distance_down_squ);
u[i][j]=u[i][j]+pow(distance_rate_squ,2.0/(m-1));
}
u[i][j]=1.0/(u[i][j]);
}

for(i=0;i<5;i++){
for(j=0;j<4;j++)
printf("%f\t",u[i][j]); //***********************
printf("\n");
} //End of outer circulation
} //End of main()
...全文
849 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshun123 2009-12-08
  • 打赏
  • 举报
回复
有点长,帮顶。。。
z569362161 2009-12-03
  • 打赏
  • 举报
回复
只有在错误中才能长大

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧