URL: https://linuxfr.org/users/xinfe/journaux/coherence-des-fonctions-d-arrondi Title: Cohérence des fonctions d'arrondi Authors: GSurrel Date: 2016年11月29日T17:30:07+01:00 License: CC By-SA Tags: calcul_scientifique et algorithmique Score: 44 Étant très inspiré par [un récent journal](https://linuxfr.org/users/guillaum/journaux/coherence-des-fonctions-de-tri), je me souviens de différences de comportements entre les langages de programmation. J'ai moins de détails techniques croustillants à mentionner, mais pour ceux qui manipulent des chiffres ~~et des lettres~~, ça peut être intéressant. Supposons que l'on veuille arrondir une valeur. *-0.5*. Facile ? Et bien en fait, pas du tout ! `round(-0.5) = ` - Python: -1 - WolframAlpha: 0 - PHP: -1 - JavaScript: -0 - Matlab: -1 - Java: 0 Si l'on tient compte du zéro négatif de JS, on a 3 valeurs différentes, et aucune n'est aberrante vu qu'en fait, c'est très louche, la notion d'arrondi. Une petite recherche sur Wikipédia nous donne en fait cinq solutions d'arrondis pour lever l’ambiguïté ou diminuer les erreurs accumulées d'arrondis en arrondis. Plutôt que de se perdre dans les détails, on va regarder [les arrondis uniquement dans le domaine de l'informatique](https://en.wikipedia.org/wiki/IEEE_floating_point#Rounding_rules) : - Arrondi vers moins l'infini - Arrondi vers plus l'infini - Arrondi vers zéro - Arrondi au plus loin de zéro - Arrondi au nombre pair : si à 0.5 près alors arrondi selon le bit de poids faible donc statistiquement 50% du temps au supérieur et 50% à l'inférieur Le comportement recommandé est le dernier car statistiquement, les erreurs d'arrondis des .5 ne se cumulent pas mais s'annulent. En pratique, on obtient : - `round(11.5) = 12` - `round(12.5) = 12` - `round(-11.5) = -12` - `round(-12.5) = -12` On comprend donc mieux le nom *d'arrondi vers le nombre pair*. Cet arrondi s'appelle aussi arrondi bancaire. J'espère que vous avez appris quelque chose et qu'un bête arrondi n'a en fait rien de bête même si c'est utilisé quotidiennement à grande échelle. Dans la même veine, vous pouvez découvrir en anglais [les innombrables subtilités des nombres flottants](https://randomascii.wordpress.com/2014/06/26/please-calculate-this-circles-circumference/). Je laisse la main à quelqu'un d'autre dans la série "Cohérences" :)