Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ayuda con función! en C

iDager

Bovino maduro
Desde
20 Jun 2010
Mensajes
466
voy comenzando mi curso de C y el maestro nos pidio que hicieramos un programa que haga 3 procesos, para luego meternos a SWITCH y que elija solo uno de esos 3,
Mi problema es con la funcion exp();
uno de los 3 procesos en calcular la probabiliadad de 'K' aciertos en 'n' pruebas, la formula que nos dio es=
P'k'=uno entre raiz cuadrada de 2 por π por 'n' por 'p' por 'q' que multiplica al exponencial NEGATIVO de K menos 'n' por 'p' al cuadrado entre dos por 'n' por 'p' por 'q'.
ya en codigo seria k=15 n=20 p=0.5 q=0.5
Código:
float Probabilidad(float k, float N, float P, float Q)
{
float Pk;
Pk=(1/sqrt(2*pi*N*P*Q))*exp(-(pow(k-(N*P),2)/(2*N*P*Q)));
return(Pk);
}
en el programa me sale 0.014645
y en mi prueba de escritorio me salio 0.03894418743
no se si esta mal escrita la función exponencial negativo porque hay 2 procesos que usan esa función y los 2 no me concuerdan
 
debiste a ver puesto cuanto son los valores de k, n, p y q para checar.
Pero ya ke no lo pusite ya ves ke tienes varios parentesis, pues bien checa esos mismos pero en l parte donde divides y multuplicas (cual es primero?):
(1/sqrt(2*pi*N*P*Q))*exp(-(pow(k-(N*P),2)/(2*N*P*Q)));
 
si estan los valores!!! jejje pi ya esta como 3.1416

y no creo que esta mal lo que dices, ya dividi lo de (1/sqrt(2*pi*N*P*Q)) aparte lo de exp(-(pow(k-(N*P),2)/(2*N*P*Q))) y solo lo primero me sale igual, y al multiplicarlo no sale, no se si me entiendas, por eso yo pienso que esta mal lo de funscion exp negativa
 
¿Estas seguro que la formula que tienes esta correcta? ¿Estas seguro que el resultado que estas obteniendo en tu corrida de escritorio es correcto? Porque la funcion exp() de C da resultados correctos (aproximados, pero correctos) asi que es mas probable que sea culpa tuya y no del compilador.

Sugiero que dividas tu formula en fragmentos mas pequeños, y compares el resultado obtenido en cada fragmento para averiguar exactamente en que parte estas obteniendo un resultado diferente entre tu corrida y el resultado del programa.

Ejemplo:

R1 = N*P;
R2 = K - R1;
R3 = pow(R2, 2);
R4 = 2*N*P*Q;
R5 = R3 / R4
R6 = exp(-R5);

¿Comprendes la idea?

Saludos :)
 
Volver
Arriba