IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Problème de maths


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème de maths
    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 !

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    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;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    Sauf erreur de ma part, si l'on tape la formule dans une calculatrice, ça me donne 0.041146... alors que Delphi nous renvoie -1
    Tu es sûr que ta calculatrice est bien en mode "radian" ?

    Citation Envoyé par birdy0476
    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.
    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.

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par sovitec Voir le message
    Tu es sûr que ta calculatrice est bien en mode "radian" ?
    Ahhhhhh Boulet j'étais, boulet je resterai :
    Je modifie mon post précédent !
    Merci pour la remarque

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    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 !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par birdy0476 Voir le message
    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.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    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...

Discussions similaires

  1. Problème fonction Math.IEEERemainder
    Par Merlon dans le forum C#
    Réponses: 4
    Dernier message: 21/03/2008, 15h27
  2. Problème de math ( formule à trouver ? )
    Par luimême dans le forum Mathématiques
    Réponses: 3
    Dernier message: 13/05/2007, 16h23
  3. Problème de math
    Par bert_ dans le forum Mathématiques
    Réponses: 3
    Dernier message: 02/05/2007, 21h31
  4. [Problème] de Maths
    Par eowene dans le forum La taverne du Club : Humour et divers
    Réponses: 7
    Dernier message: 21/04/2007, 15h05
  5. Problème de math....
    Par zdra dans le forum Mathématiques
    Réponses: 6
    Dernier message: 11/11/2002, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo