34Fermer36
UtherLe 13/08/2016 à 09:47
Zerosquare (./30) :
Tiens, j'aurais plutôt dit que les "matheux" seraient plus susceptibles de comprendre les flottants et les problèmes associés que les "dévs" : quand on creuse, c'est quelque chose de beaucoup plus proche des mathématiques "pures" que de l'info appliquée. Mais je ne sais pas si ceux qui ont un cursus "matheux" sont familiarisés à ces questions (en 2016, avec des ordinateurs partout, on pourrait l'espérer, mais...)
Je ne doute pas qu'ils aient les capacités intellectuelles de comprendre la chose. C'est juste qu'il ne sont pas habitués a travailler en binaire, et surtout ils ne s'imaginent pas naturellement qu'un nombre écrit de manière décimale est en fait binaire.
PpHd (./33) :
Les flottants ont des règles très précises.
Je dirais au contraire que l'implémentation de float est plutôt variable, malgré le IEEE 754 qui plus ou moins bien implémenté par chaque langage.
En tout cas le comportement observé ici est tout a fait cohérent avec les règles habituelles des flottants binaire.
PpHd (./33) :
Le problème est juste de comprendre que le nombre en représentation décimale est arrondi en représentation flottante avant même toute opération sur le nombre. Et il faut savoir les nombres qui sont représentés exactement. Après çà ce n'est pas très compliqué.
Il y a deux problèmes : les arrondis suite a certains calculs comme la division, et les arrondis dus à la conversion binaire/décimal (qui peuvent être en effet evités par du BCD).
Les premiers sont assez naturels : on apprend a les gérer dès l'école primaire. Pour les seconds c'est pas du tout naturel pour quelqu'un qui ne connaît pas le problème. En général seul les développeurs connaissent bien le soucis, et encore pas tous.
C'est pour ça que je pense que les flottants dans ce genre de logiciel est probablement une mauvaise idée, même
Meowcate (./34) :
Est-ce qu'on peut l'éviter en faisant convertir au logiciel tout flottant fini par une division par 10n pour un nombre multiplié par 10n ?
Qu'une entrée ou résultat de 159.7884 soit remplacé par 1597884/10000 ?
Oui, ça sera mois performant mais exact.
Meowcate (./34) :
Et que pour les flottants très longs ou indéfinis, le facteur n soit limité à la précision que le logiciel donne au résultat ?
Ça serait sans doute plus compliqué: en fonction de l’enchaînement des opérations demandées la précision nécessaire des entrées peut varier.