Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Je travaille sur un logiciel de marketing (génération de courriers, envois de courriels et de SMS). Suite à une migration vers la dernière version, nous avons noté une régression gênante : le logiciel modifie parfois la valeur des nombres avec décimales.

Par exemple, lorsqu'on interroge une table pour sortir toutes les lignes où la colonne « x = 18,66 », la requête générée contient « x = 18,66666666667 » dans sa clause WHERE. Ce phénomène est également présent lors de l'affichage des résultats d'un SELECT.

L'éditeur du logiciel, interrogé à ce sujet, nous a expliqué que c'est le changement de technologie chez eux qui est à l'origine de ce problème et que c'est normal, vu que les valeurs avec décimales sont des approximations.
Heureusement, après avoir prouvé la régression nous attendons un correctif. Nous avons dû négocier pendant deux mois pour ça, et je ne sais pas quand ce sera enfin disponible.

Pour les développeurs qui se contentent d'approximations : PEBKAC.
PEBKAC #7308 proposé par Deck le 22/03/2013 | 16 commentaires | 👍🏽 👎🏽 +133
Les valeurs décimales sont des approximations??? ouaip ouaip...
Commentaire #84760 écrit par Myosotys le 22/03/2013 à 17h38 | 👍🏽 👎🏽
Oui, dans la plupart des langages, les nombres à virgule flottante sont des approximations. La seule valeur où est absolument sûr de ne pas avoir d'approximation est zéro... On ne va pas aller loin avec !

Voir par exemple http://fr.wikipedia.org/wiki/Nombre_%C3%A0_virgule_flottante#Pr.C3.A9c[...] pour quelques exemples de choses qui peuvent poser problème.

Je me rappelle également d'un paragraphe dans un livre sur Perl où l'auteur montrait que la soustraction de deux flottants ne donnait pas le résultat qu'on pouvait attendre de tête (du genre 5,4 - 1,7 != 3,7).
Commentaire #84762 écrit par Acné le 22/03/2013 à 17h52 | 👍🏽 👎🏽
Ce que voulait probablement dire Myosotys est que le fait que les valeurs décimales soit des approximations n'est certainement pas une propriété intrinsèque de ceux-ci mais comme tu dis une particularité de certains languages de programmation.
Commentaire #84769 écrit par Noraa le 22/03/2013 à 18h29 | 👍🏽 👎🏽
Bah encore le contraire aurait été compréhensible, genre 18.6666666667 -> 18.66, mais la 18.66-> 18.6666666667, c'est juste la tête à l'envers.
Commentaire #84772 écrit par defunes43 le 22/03/2013 à 18h39 | 👍🏽 👎🏽
Nan mais allo quoi ! (désolé, je suis déjà sorti)
Commentaire #84786 écrit par TuXiC69 le 22/03/2013 à 19h41 | 👍🏽 👎🏽
Attention à ne pas confondre le fait que la valeur résultant d'un calcul soit une approximation (on ne peut représenter qu'un sous-ensemble discret de |R avec des flottants), et le fait d'obtenir une approximation sur la valeur comparée.

EDIT : Mea culpa, j'avais pas compris le PEBKAC, c'est tout à fait possible que la valeur 18,66 ne soit pas représentable exactement en binaire (problème de base, dans ce cas).
Commentaire #84789 écrit par Epok__ le 22/03/2013 à 19h51 | 👍🏽 👎🏽
J'ai à la fois envie de voter PEBKAC et CTLP, simplement parce que dans ce qu'il dit, il a entièrement raison.
MySQL enregistre les nombres flottants de manière approximatives.

Cf http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
Commentaire #84791 écrit par Enkimy le 22/03/2013 à 20h10 | 👍🏽 👎🏽
Avec les float, c'est normal que cela coule. Pour l'exemple, 6, 66 aurait été plus diabolique
Commentaire #84797 écrit par Gabriel le 22/03/2013 à 21h22 | 👍🏽 👎🏽
Même pour 0 on peut avoir des problèmes (du genre a-a=3.45*10^-23).

C'est un vrai problème, qui peut parfois être assez critique, comme la perte d'une fusée.

http://fr.wikipedia.org/wiki/Vol_501_d'Ariane_5
Commentaire #84800 écrit par Link le 22/03/2013 à 21h44 | 👍🏽 👎🏽
Je travaille sur un logiciel de marketing (génération de courriers, envois de courriels et de SMS) PEBKAC

Merci pour le spam
Commentaire #84801 écrit par vilaintroll le 22/03/2013 à 22h14 | 👍🏽 👎🏽
J'ai récemment incendié un presta qui dans ses spec techniques me proposait de stocker des montant à 2 décimales dans une colonne de type float, ou comment être sûr de se taper ce genre de problèmes >_<
Commentaire #84802 écrit par Sly le 22/03/2013 à 22h31 | 👍🏽 👎🏽
Pour info, les données ne sont pas stockées en décimal ...
Commentaire #84804 écrit par BSK le 22/03/2013 à 22h44 | 👍🏽 👎🏽
Depuis quand t'as besoin de nombre à virgule flottante en marketing ?
La loi c'est on arrondi à 3 chiffres après la virgule. Donc un long où tu fixes la virgule suffit amplement.
Int en 32 bit c'est un peut petit pour certaines. ;)
Commentaire #84820 écrit par but2ene le 23/03/2013 à 09h45 | 👍🏽 👎🏽
C'est indépendant du langage, les CPU représentent (généralement, en tout cas pour les x86 et x86_64) les nombres réels suivant la norme IEEE 754.

Bien sûr, en compta, on fait (normalement) tout sur des entiers et on affiche un résultat divisé par 100 ou 1000 selon la précision stockée dans l'entier (centime ou dizième de centime).
Commentaire #84844 écrit par Freudo le 23/03/2013 à 12h06 | 👍🏽 👎🏽
Bien sûr qu'en compta il faut utiliser des nombres à précision fixe. C'est juste que beaucoup ne le savent pas et utilisent des flottants. Jusqu'à maintenant, je n'ai eu qu'un seul junior à qui je ne l'ai pas appris... Il faut croire qu'ils ne l'apprennent plus à l'école.

Donc dans ce cas, je suis partagé :
- oui, les flottants sont systématiquement une approximation ;
- non, l'éditeur n'aurait jamais dû utiliser de flottant pour son application.
Commentaire #84850 écrit par Acné le 23/03/2013 à 13h00 | 👍🏽 👎🏽
désolé, mais nous avons intégré votre logiciel au traîtement des factures
nous allons vous régler un montant indéterminé et approximatif dans un délais variable
Commentaire #84965 écrit par Papa le 23/03/2013 à 21h43 | 👍🏽 👎🏽