Ayuda con función! en C

iDager

Bovino maduro
#1
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
 
#2
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)));
 

iDager

Bovino maduro
#3
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
 

ProfesiorX

Bovino adolescente
#4
¿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 :)
 
Arriba