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

Python Discussion :

simple IF mais


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2009
    Messages : 1
    Points : 2
    Points
    2
    Par défaut simple IF mais
    Bonjour,
    le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    a=4.9
    b=5
    n=1
     
    while n<200: 
        print"-----------"
        print a,b
        if a<b:
            print "a est plus petit que b"
     
        a=a+0.1
        print"------------"
        hh=raw_input('attente')
        n=n+1
    Est ce qqun peut me dire pourquoi quand 'a'=5 on affiche quand même le texte "a est plus petit que b" ?

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    non, ça fonctionne; mais sutilise la balise code.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Points : 67
    Points
    67
    Par défaut
    Bonsoir,

    Je n'ai pas ce problème :
    4.9 5
    a est plus petit que b
    ------------
    attente
    -----------
    5.0 5
    ------------
    attente
    -----------
    5.1 5
    ------------
    attente
    -----------
    5.2 5
    ------------
    attente
    N'aurais-tu pas un problème d'indentation quelque part ?
    Indentation correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a=4.9
    b=5
    n=1
     
    while n<200:
        print"-----------"
        print a,b
        if a<b:
            print "a est plus petit que b"
        a=a+0.1
        print"------------"
        hh=raw_input('attente')
        n=n+1
    @+

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    De toute façon, il ne faut jamais compter sur un test d'égalité avec les nombres réels, car la représentation flottante des nombres réels ne permet pas de représenter de façon exacte tous les nombres réels même s'ils ont une représentation exacte en décimal. Cela donne lieu à des erreurs d'arrondis. Pour cette raison, lorsque l'on compare des nombres réels (obtenus par des calculs différents), il faut prévoir une marge d'erreur.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> 4.8 + 0.1 == 4.9
    False
    >>> 4.8 + 0.1
    4.8999999999999995
    >>> 4.9
    4.9000000000000004
    >>> epsilon = 1e-10
    >>> abs(4.8 + 0.1 - 4.9) < epsilon
    True
    Le comportement que tu attends de ton code dépend de ce que 4.9 + 0.1 == 5. Cela fonctionne ici, mais cela ne fonctionnera pas pour d'autres valeur.

  5. #5
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Pour régler le problème des arrondis lié au fais que le pc stocke les nombres en base 2 et que nous, nous les représentons en base 10. Il existe le module decimal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from decimal import *
     
    a = Decimal('4.9')
    b = Decimal('0.1')
     
    print a + b
    print a + b == Decimal('5.0')
    Par contre c'est sûrement moins rapide que d'utiliser des réels.


    Aparté :
    1/10 = 0.1 en base 10. C'est un nombre fini.
    1/10 = 0,0001100110011001100110011..... en base 2, le nombre de décimale n'est pas fini, d'où les problèmes de calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    j = 0.0
    for i in range(1000000):
        j += 0.1
     
    print j
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SOS : simple, bête mais ça marche pas
    Par amnay dans le forum Débuter
    Réponses: 3
    Dernier message: 09/02/2009, 17h08
  2. simple Script, mais ca marche pas
    Par super_dz dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 11/09/2007, 13h00
  3. Une page simple, oui mais...
    Par Nerva dans le forum Langage
    Réponses: 18
    Dernier message: 10/04/2006, 13h38
  4. un simple break; mais comment ??
    Par kmaniche dans le forum C++
    Réponses: 2
    Dernier message: 14/02/2006, 22h33
  5. Simple floating mais pourtant IE bugge
    Par ArithmeticException dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/02/2005, 08h32

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