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

Administration MySQL Discussion :

Un joli petit bug : 1 = 0....


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut Un joli petit bug : 1 = 0....
    Vous êtes tous d'accord que la valeur entière arrondie à l'inférieur de 1 c'est 1, n'est-ce pas ?

    Essayez ceci : SELECT FLOOR(1/3+2/3)

    J'ai rapporté le bug sur la page de bugs de MySQL, et le rapport était introuvable le lendemain. Pas très sérieux.

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Ingénieur DevOps
    Inscrit en
    Mai 2002
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 214
    Par défaut
    Citation Envoyé par davcha
    Vous êtes tous d'accord que la valeur entière arrondie à l'inférieur de 1 c'est 1, n'est-ce pas ?

    Essayez ceci : SELECT FLOOR(1/3+2/3)

    J'ai rapporté le bug sur la page de bugs de MySQL, et le rapport était introuvable le lendemain. Pas très sérieux.
    Gardez son calme, gardez son calme, gardez son calme

    Normal , SELECT FLOOR(1/3+2/3) doit bien retourner 1
    Je te renvoie à tes cours de mathématiques sur la distributivité. La base de ces axiomes (ou théorème, je ne sais plus) déclarent qu'on commence par calculer ce qui est entre parenthèse.

    En effet, FLOOR(1/3+2/3)=SELECT FLOOR(1) = 1
    Tu confonds avec : SELECT FLOOR(1/3)+FLOOR(2/3) = SELECT 0 + 0 = 0

    Avant de critiquer le sérieux de développeurs qui analysent les bugs soumis, il faut être sûr de ce qu'on écrit.

    Allez l'erreur est humaine sans rancune aucune

    PS : j'ai vérifié c'est un théorème et non un axiome.
    Alexandre Tranchant
    Ingénieur DevOps pour le Ministère de l'Écologie
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Citation Envoyé par Alexandre T
    Allez l'erreur est humaine sans rancune aucune
    En effet.

    Vérifies : SELECT FLOOR(1/3+2/3).
    Je n'ai pas fait d'erreur :


  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Ca vient sûrement de la représentation interne des flottants qui n'est pas exacte (0.99999 au lieu de 1). En revanche ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FLOOR(cast(1/3+2/3 as decimal))

  5. #5
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Oui, ça vient de ça. Mais c'est en fait un peu plus pénible que ça encore.

    Le problème n'existe pas QUE dans ce cas précis. Il existe également dans ce cas là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE  TABLE  `test` ( `id` BIGINT NOT  NULL  AUTO_INCREMENT  PRIMARY  KEY ,
     `value` DOUBLE NOT  NULL 
    ) ENGINE  = innodb;
     
    INSERT INTO test (value)
    VALUES (1/3),(2/3)
     
    SELECT FLOOR(SUM(value))
    FROM test
     
    retour : zéro.
    Ce qui est déjà beaucoup plus embêtant.
    On est forcé de caster lors de l'insertion en fait, comme le dit Maximilian.
    Ce qui peut être bien embêtant pour certaines version de mysql4.

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par davcha
    On est forcé de caster lors de l'insertion en fait, comme le dit Maximilian.
    Pas forcément mais lors de la sélection si on veut des valeurs exactes, oui.

    Edit : ce comportement disparait peut-être avec la 5.0, à tester...

  7. #7
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Ingénieur DevOps
    Inscrit en
    Mai 2002
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 214
    Par défaut
    Ok je sors... J'ai compris que ça retournais un et que tu voulais zéro ...

    Bon bah le zéro là dessus c'est moi !
    Alexandre Tranchant
    Ingénieur DevOps pour le Ministère de l'Écologie
    Retrouvez mes articles sur PHP et Symfony

  8. #8
    Expert confirmé
    Avatar de cchatelain
    Homme Profil pro
    Analyste décisionnel marketing
    Inscrit en
    Janvier 2003
    Messages
    4 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste décisionnel marketing
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 4 138
    Par défaut
    Citation Envoyé par davcha
    J'ai rapporté le bug sur la page de bugs de MySQL, et le rapport était introuvable le lendemain. Pas très sérieux.
    http://bugs.mysql.com/bug.php?id=19746 le rapport est encore là
    Grave urgent : Vous êtes nouveau sur développez.com ? Bienvenue à vous. Mes meilleurs conseils sont ceux-ci :
    1 : lisez bien ceci http://club.developpez.com/aidenouveaux/
    2 : lisez aussi ceci http://general.developpez.com/cours/


    Mon activité associative actuelle

  9. #9
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Ah tiens... Marrant, il avait disparu pendant un temps

    J'aime bien leur "status : not a bug".
    Traduction : on sait que ça déconne, mais on a la flemme. C'est pas à nous de produire un vrai truc qui marche convenablement, c'est à l'utilisateur final de se faire chier à implémenter des tests foireux à base d'intervalles merdiques qui leur permetteront d'avoir une maintenance tout à fait atroce.

  10. #10
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Pour moi le gars avec un nom à coucher dehors a bien expliqué pourquoi ce n'est pas un bug.

    Ou est-ce que tu bloques, il suffit de convertir en decimal pour que ça fonctionne ?

    PS : je viens de tester la requête SELECT FLOOR(1/3+2/3) sur SQL Server 2000 et elle a exactement le même comportement.

  11. #11
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Tu en es sûr ?

    Fais ceci : SELECT 1/3+2/3
    Puis cela : SELECT FLOOR(1/3+2/3)
    (les deux sans casts)

    Moi, la première j'obtiens 1, et pas 0.99999
    Donc il est logique que la seconde me renvoie 1 et pas 0.

    Ou alors c'est que SELECT 1/3+2/3 ne renvoie pas le bon résultat.

    Je vois pas comment on ne peut pas voir un bug là dedans, c'est ridicule.

  12. #12
    Expert confirmé
    Avatar de cchatelain
    Homme Profil pro
    Analyste décisionnel marketing
    Inscrit en
    Janvier 2003
    Messages
    4 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste décisionnel marketing
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 4 138
    Par défaut
    Moi, en tous cas, je vois une régression... Maintenant, est-ce génant ou blocant ? Je n'ai pas la compétence pour en juger.
    Grave urgent : Vous êtes nouveau sur développez.com ? Bienvenue à vous. Mes meilleurs conseils sont ceux-ci :
    1 : lisez bien ceci http://club.developpez.com/aidenouveaux/
    2 : lisez aussi ceci http://general.developpez.com/cours/


    Mon activité associative actuelle

Discussions similaires

  1. Petit bug de compilation
    Par Chess0 dans le forum C++
    Réponses: 12
    Dernier message: 04/12/2005, 19h12
  2. Réponses: 1
    Dernier message: 29/11/2005, 17h32
  3. Petit bug.
    Par CCin dans le forum C
    Réponses: 15
    Dernier message: 12/10/2005, 12h08
  4. [RegEx] Petit Bug sur Expression Régulière
    Par Delphy113 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 20h48

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