problemas con la respuesta de una función
Estoy escribiendo un programa, dentro del cual tengo una función que me regresa un float; lo imprimo previo al return y veo el valor que tiene; pero al salir el valor de la función se convierte en 0.00000 el siguiente es el codigo de la función:
float fun_pasoE(struct tr_t *tr, float *xn, float **x, int c ){
float PasE;int j, d;
printf("Estoy en el paso E ");
PasE=((tr->p[c])*Prx(tr,xn,(c/tr->M)))/(pra(tr,xn,(c/tr->M))); printf("PE=%fn",PasE);
return PasE;}
llamado a la funcion:
for(n=0;n<N;n++){Y=fun_pasoE(tr,x[n],x,tr->clase[n]);printf("PasoE=%f PasoE=%fn",fun_pasoE(tr,x[n],x,tr->clase[n]),Y);}
resultado:
PE=0.193252
PasoE==0.000000 PasoE=0.000000
después de esto he modificado la función y tengo un error similar en un calculo cuando realizo sigma[j][d] tr->sigma[j][d]=(tr->p[j])*(pow((xn[d]-tr->miu[j][d]),2)/tr->p[j]); y la imprimo en la línea printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]); me sucede similar
float fun_pasoE(struct tr_t *tr, float *xn, float **x, int c ){
float PasE;int j, d;
printf("Estoy en el paso E ");
PasE=((tr->p[c])*Prx(tr,xn,(c/tr->M)))/(pra(tr,xn,(c/tr->M))); printf("PE=%fn",PasE);
for (j=(c*tr->M);j<((c+1)*tr->M);j++) {tr->p[j]+=(PasE); printf("tr->p[%d]=%fn",j,tr->p[j]);
for (d=0;d<tr->D;d++){printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]);
tr->miu[j][d]= (tr->p[j]*xn[d])/(tr->p[j]);}
for (d=0;d<tr->D;d++){printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]);
printf("%f",(tr->p[j])*(pow((xn[d]-tr->miu[j][d]),2)/tr->p[j]));
tr->sigma[j][d]=(tr->p[j])*(pow((xn[d]-tr->miu[j][d]),2)/tr->p[j]);printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]);}}
return PasE;}
resultado
tr->p[0]=0.393252
[0][0] 0.989014,0.107514
0.000000[0][0] 0.989014,0.000000
[0][1] 0.557005,0.091614
0.000000[0][1] 0.557005,0.000000
[0][2] 0.719470,0.128977
0.000000[0][2] 0.719470,0.000000
[0][3] -0.096884,0.111393
0.000000[0][3] -0.096884,0.000000
[0][4] 0.444178,0.082159
0.000000[0][4] 0.444178,0.000000
[0][5] 0.742374,0.125128
0.000000[0][5] 0.742374,0.000000
[0][6] 0.779877,0.127222
0.000000[0][6] 0.779877,0.000000
[0][7] 1.264877,0.123685
0.000000[0][7] 1.264877,0.000000
Si alguien me puede colaborar se lo agradezco mucho
Juan Pachanga
float fun_pasoE(struct tr_t *tr, float *xn, float **x, int c ){
float PasE;int j, d;
printf("Estoy en el paso E ");
PasE=((tr->p[c])*Prx(tr,xn,(c/tr->M)))/(pra(tr,xn,(c/tr->M))); printf("PE=%fn",PasE);
return PasE;}
llamado a la funcion:
for(n=0;n<N;n++){Y=fun_pasoE(tr,x[n],x,tr->clase[n]);printf("PasoE=%f PasoE=%fn",fun_pasoE(tr,x[n],x,tr->clase[n]),Y);}
resultado:
PE=0.193252
PasoE==0.000000 PasoE=0.000000
después de esto he modificado la función y tengo un error similar en un calculo cuando realizo sigma[j][d] tr->sigma[j][d]=(tr->p[j])*(pow((xn[d]-tr->miu[j][d]),2)/tr->p[j]); y la imprimo en la línea printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]); me sucede similar
float fun_pasoE(struct tr_t *tr, float *xn, float **x, int c ){
float PasE;int j, d;
printf("Estoy en el paso E ");
PasE=((tr->p[c])*Prx(tr,xn,(c/tr->M)))/(pra(tr,xn,(c/tr->M))); printf("PE=%fn",PasE);
for (j=(c*tr->M);j<((c+1)*tr->M);j++) {tr->p[j]+=(PasE); printf("tr->p[%d]=%fn",j,tr->p[j]);
for (d=0;d<tr->D;d++){printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]);
tr->miu[j][d]= (tr->p[j]*xn[d])/(tr->p[j]);}
for (d=0;d<tr->D;d++){printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]);
printf("%f",(tr->p[j])*(pow((xn[d]-tr->miu[j][d]),2)/tr->p[j]));
tr->sigma[j][d]=(tr->p[j])*(pow((xn[d]-tr->miu[j][d]),2)/tr->p[j]);printf("[%d][%d] %f,%fn",j,d,tr->miu[j][d],tr->sigma[j][d]);}}
return PasE;}
resultado
tr->p[0]=0.393252
[0][0] 0.989014,0.107514
0.000000[0][0] 0.989014,0.000000
[0][1] 0.557005,0.091614
0.000000[0][1] 0.557005,0.000000
[0][2] 0.719470,0.128977
0.000000[0][2] 0.719470,0.000000
[0][3] -0.096884,0.111393
0.000000[0][3] -0.096884,0.000000
[0][4] 0.444178,0.082159
0.000000[0][4] 0.444178,0.000000
[0][5] 0.742374,0.125128
0.000000[0][5] 0.742374,0.000000
[0][6] 0.779877,0.127222
0.000000[0][6] 0.779877,0.000000
[0][7] 1.264877,0.123685
0.000000[0][7] 1.264877,0.000000
Si alguien me puede colaborar se lo agradezco mucho
Juan Pachanga
