Ver Mensaje Individual
  #3 (permalink)  
Antiguo 17/09/2015, 08:33
shikamarucb
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 2 meses
Puntos: 0
Pregunta Respuesta: Se cierra programa al aproximarse a 1

Hola eferion, el valor que tiene alcanzar 1 es el valor de x que esta en la funcion evaluar, delta por el contrario tiene que alcanzar el valor de 0; si delta alcanza el valor de 0 el valor de x tendra que alcanzar el valor de 1 o superior, por eso ando multiplicando por 10000000 para que el double no se me salga del rango de precisión, la verdad no se que pasa...
Cita:
Iniciado por eferion Ver Mensaje
Tu programa tiene dos problemas:

1. la función recalcular no va a alcanzar nunca el valor 1.0. El motivo es que delta tendrá un valor proporcional a la distancia entre el valor real y 1, cuando ambos valores estén lo suficientemente próximos delta tendrá un valor inferior a la precisión de double, de tal forma que:

Código :
Ver original
  1. dendritas[0].peso=dendritas[0].peso+delta=dendritas[0].peso;
  2. dendritas[1].peso=dendritas[0].peso+delta=dendritas[0].peso;

por cierto, fíjate que dendritas[1].peso se igual a dendritas[0].peso, eso no se si es un comportamiento correcto
y esto se producirá para el resto de iteraciones.

esto se podría solucionar si admitieses como valor válido no que x>=1, sino fabs(x-1)<1e-4. De esta forma admites que, por ejemplo, 0.99991 equivale a 1.0

2. El segundo error es un fallo de diseño. Tu programa se basa en la recursividad lo cual no creo que sea lo adecuado dada la naturaleza del algoritmo que pretendes calcular... sería más lógico romper esa recursividad y sustituirla por un bucle, quizás un while sería lo más lógico.

Un saludo