poneyz a écrit :
pour mon next problème c'est que j'aimerais avoir la valeur exacte des racine j'ai donc passer x1 x2 et delta en float mais ca me donne des valeurs aberrante
Code :
- x1=(-b)/(2*a);
- x2=(-b)/(2*a);
|
|
Salut
Le problème, c'est que le calcul se fait dans la précision de l'opérande le plus large impliqué. Or a et b étant des int, le calcul se fait en int et le résultat (entier) est ensuite copié dans x1 et x2 mais c'est trop tard, tu as déjà perdu les décimales
Code :
- x1=(-b)/(2.0*a);
- x1=(-b)/(2.0*a);
|
Avec un double impliqué (2.0), le calcul se fera en précision double.
Attention, il faut bien comprendre que le calcul se fait avec la précision des opérandes strictement impliqués par chaque opération et non dans la précision de l'opérande le plus large qu'on peut trouver dans le calcul. Exemple
Code :
- float f=5 / 2 + 3.0
|
La division étant prioritaire, le premier calcul sera 5/2 et se fera donc en précision int (le 3.0 n'étant pas impliqué ne sera pas pris en compte). Le résultat sera alors en int (2) et sera ensuite additionné à 3.0 pour donner 5.0 ce qui ne correspond pas au résultat espéré (5.5)
poneyz a écrit :
et ma deuxieme question c'est que parfois je ne peux pas utiliser le debugger de code blocks tout est griser pourquoi ?
|
Alors là...
PS: inutile de passer par fabs() quand delta < 0. Puisque delta est <0, te suffit de prendre -delta. Plus rapide quoi. Toutefois, dans ce cas là, le polynôme n'a pas de racine réelle donc ce que tu affiches est faux...
Message édité par Sve@r le 17-10-2011 à 00:48:29
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.