Bonjour,
Je cherchais à partir d'un paramètre A à retrouver la solution à l'équation x*(x-1) = A
La solution complète est x = (1 ± √(4*A + 1)) / 2.
Comme je cherche une solution positive et que la racine de 5 est > 1, je peux considérer que x = (1 + √(4*A + 1)) / 2
Je veux un résultat entier et j'ai trouvé ici la fonction ceil() qui retourne la valeur entière supérieure ou égale au paramètre qui lui est passé.
Mon calcul final est doncMais là, j'ai un petit problème : Pour des valeurs intermédiaires de A, où on tombe sur un float, ceil retourne la bonne valeur.Code:x = ceil ((1 + sqrt(4*A + 1)) / 2);
En revanche, si je rentre une valeur pour A qui devrait retourner une valeur entière pour x, ceil retourne parfois la valeur supérieure, parfois la bonne valeur.
J'ai retiré la fonction ceil de mon code pour visualiser la valeur calculée pourPar exemple pour A = 6, on devrait avoir x = (1+√25)/2 = 3, mais XC8 trouve x = 3.000061Code:x = (1 + sqrt(4*A + 1)) / 2;
Pour A = 12, on devrait avoir x = (1+√49)/2 = 4, mais XC8 trouve x = 4.000122
Pour A = 20, on devrait avoir x = (1+√81)/2 = 5... et XC8 trouve bien x = 5.0
A partir de là, ça fonctionne correctement pour les A = 30 et A = 42.
Pour A = 56, encore une fois, on devrait trouver x = 8 et XC8 trouve x = 8.000244
Etc...
Avez-vous une idée d'où peut venir le problème et comment le contourner ?
Comment se fait-il que le calcul soit erroné ?
-----