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 :

max() buggé ?


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut max() buggé ?
    Bonsoir,

    je débute en python (après m'être arrêté au turbo pascal il y a environ 15 ans ) et en bidouillant un peu, je tombe sur un résultat étrange de la fonction max()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> max ( 1 , 1.5 )
    1.5
    >>> max ( 1 , 1.1 )
    1.1000000000000001
    c'est un peu embêtant...

    j'utilise mal la fonction ??? c'est un bug connu ??

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    je pense qu'il s'agit d'un bug du shell. Il ya le même comportement sans la fonction max(). Si tu ajoutes print ça fonctionne correctement. C'est certainement un problème lors de la conversion du float en string. C'est vrai que c'est assez surprenant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> 1.1
    1.1000000000000001
    >>> print 1.1
    1.1
    >>> 1.1

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 76
    Par défaut
    Salut !

    Ce n'est pas propre à max() mais plutôt à la représentation des nombres à virgule. Si tu tapes 1.1 dans l'interpréteur pyhton tu obtiendras aussi 1.1000000000000001 à cause de l'arrondie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> 1.1
    1.1000000000000001
    >>>
    A lire pour plus d'infos :
    http://wikipython.flibuste.net/CalculerJuste
    http://www.python.org/doc/2.4.1/tut/node16.html

  4. #4
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut
    Merci beaucoup à vous 2 pour ces précisions.

    J'avoue que je suis sur le c** ! Je n'avais jamais remarqué ça dans ma "jeunesse", mais d'après ce que j'ai lu sur tes liens, c'est tout à fait banal en programmation...
    Merci et bonne nuit.

    EDIT : dans le même style que le print :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> a= 1.1
    >>> a
    1.1000000000000001
    >>> str(a)
    '1.1'
    mais truc drôle :

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par spirzouf Voir le message
    mais truc drôle :
    C'est normal... Non ?

    Citation Envoyé par nyko77 Voir le message
    je pense qu'il s'agit d'un bug du shell.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> 1.1
    1.1000000000000001
    >>> print 1.1
    1.1
    >>> 1.1
    Il ne faut pas oublier que print appelle la méthode __str__ des objets de type float.
    Ici la méthode __str__ nettoie la représentation utilisée en interne du nombre 1.1.

    Plus précisément, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> str(0.1)
    '0.1'
    >>> repr(0.1)
    '0.10000000000000001'
    S'il est indispensable de travailler avec des valeurs exactes, il faut utiliser le module decimal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import decimal
    >>> a = decimal.Decimal('1.1')
    >>> b = decimal.Decimal('1.000000000000000000000000001')
    >>> a == b
    False

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut
    Citation Envoyé par rambc Voir le message
    C'est normal... Non ?



    Il ne faut pas oublier que print appelle la méthode __str__ des objets de type float.
    Ici la méthode __str__ nettoie la représentation utilisée en interne du nombre 1.1.
    oui, c'est normal, mais devant l'affichage et sans connaitre la différence entre la valeur et sa représentation, on pouvait en douter

    Merci pour ces précisions

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

Discussions similaires

  1. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  2. definir un nombre decimal sur 2 numero max apres la vergule
    Par nil dans le forum Bases de données
    Réponses: 5
    Dernier message: 25/02/2004, 21h49
  3. Max
    Par MASSAKA dans le forum Requêtes
    Réponses: 8
    Dernier message: 14/01/2004, 17h44
  4. opengl et 3dstudio max
    Par maamar dans le forum OpenGL
    Réponses: 3
    Dernier message: 28/09/2002, 20h48
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

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