Bonjour,
Je ne comprends pas pourquoi showmessage(floattostr(tan(3*pi/4))) retourne '-1' mais la condition if tan(3*pi/4)=-1 n'est jamais vraie.
Merci de m'aider !
Bonjour,
Je ne comprends pas pourquoi showmessage(floattostr(tan(3*pi/4))) retourne '-1' mais la condition if tan(3*pi/4)=-1 n'est jamais vraie.
Merci de m'aider !
Salut,
Aussi, si tu veux faire une comparaison, saches qu'il est déconseillé de le faire avec une égalité. En effet, travailler avec des valeurs flottantes est une des choses les plus délicates à gérer en programmation.
Je peux te conseiller de lire ceci pour avoir une idée de comment gérer la chose éventuellement
[Edit]
J'ai fait ça, et ça fonctionne mais bon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TForm1.Button1Click(Sender: TObject); begin if RoundTo(tan(3*pi/4),-2) = -1 then ShowMessage('Stop'); end;
Tu es sûr que ta calculatrice est bien en mode "radian" ?
A cause des problème de conversion en décimal et de précision des calculs, il arrive souvent que la valeur affichée ne soit pas strictement égale à la valeur "binaire" du résultat d'un calcul. Delphi peut donc afficher "1" mais la représentation interne peut être plus proche de 0.9999999999999999999125 ou 1.00000000000000000000875.Envoyé par birdy0476
merci pour vos reponses, mais je reste stupefait que la procedure tan n'est pas fait l'arrondi a la bonne valeur...car tan(3*pi/4) ca fait exactement -1, d'ailleur pour d'autres valeurs les resultats sont exacts.
Incroyable qu'un ordi fasse une erreur de calcul !
Les ordinateurs ne font pas d'erreurs de calcul, mais ont une précision limitée pour la représentation des nombres. La Valeur de pi dans tan(3*pi/4) n'est pas une valeur exacte, mais une valeur approchée, et donc le résultat de l'opération est aussi une valeur approchée. Selon les calculs les arrondis peuvent retomber sur la valeur exacte, mais pas toujours, et ton cas est un bon exemple.
Avec mapple ou matlab, par exemple, tu auras bien tan(3Pi/4) = -1...
Avec delphi, le calcul passe par des DL, et comme dit sovitec, la valeur de Pi est elle même approchée.
Donc, le résultat est à un epsilon près, largement suffisant pour une valeur numérique, pas forcément suffisant pour satisfaire un test d'égalité strict...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager