Voici un programme simple qui calcule sqrt d'un nombre en utilisant Bisection. En cours d'exécution avec un appel comme sqrtr (4,1,4) dans va dans une récursivité sans fin. Je suis incapable de comprendre pourquoi cela se produit. Ci-dessous la fonction:Problème avec une fonction récursive pour trouver sqrt d'un nombre
double sqrtr(double N , double Low ,double High )
{
double value = 0.00;
double mid = (Low + High + 1)/2;
if(Low == High)
{
value = High;
}
else if (N < mid * mid)
{
value = sqrtr(N,Low,mid-1) ;
}
else if(N >= mid * mid)
{
value = sqrtr(N,mid,High) ;
}
return value;
}
Je sens une condition de limite d'incohérence d'arrondi. –
http://docs.sun.com/source/806-3568/ncg_goldberg.html –
@Platinum Azure: étonnamment, je ne le fais pas. Crédits à jpalecek, qui a noté que la partie +1 a été volée d'un algorithme entier. Cela vous donne complètement les mauvaises limites, donc cela n'a plus d'importance comment vous les arrondissez. – MSalters