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 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 originaldendritas[0].peso=dendritas[0].peso+delta=dendritas[0].peso;
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