|
FAQ DE WINDEV, WEBDEV ET WINDEV MOBILE |
|
| |
|
| | |
FAQ n°2644, publiée le 20/02/2003 |
| Sur une opération impliquant un nombre déclaré en "réel", il m'arrive parfois de perdre des décimales. Pourquoi ? |
L'imprécision (relative) des réels sur les décimales provient du codage binaire en virgule flottante (codage IEEE). Ce codage IEEE-754 est utilisé par quasiment tous les langages de programmation (C, C++, C#, JAVA, WLangage). Avant d'aller plus loin, précisons immédiatement qu'il y a une solution très simple pour ne pas perdre de décimales : il suffit d'utiliser le type monétaire qui est parfaitement précis. L'imprécision du codage binaire concerne les chiffres à droite de la virgule. En effet en codage binaire, chaque 1 à droite de la virgule est une fraction de deux: 1/2, 1/4, 1/8, 1/16, etc.
Certains nombres sont faciles à coder: par exemple 0.75 en décimal s'écrit 0.11 en binaire (1/4 + 1/2) (bien entendu, une machine ne connait au final que le binaire !). En revanche, 0.8 est impossible à obtenir en additionnant des fractions de 2. Si on choisit de s'arrêter à 10 chiffres après la virgule, 0.8 en décimal s'écrira 0.1100110011 en binaire, soit 1/2 + 1/4 + 1/32 + 1/64 + 1/1024 + 1/2048. Mais il y reste encore beaucoup d'autres chiffres après ces 10 décimales pour arriver "exactement" à 0.8. La valeur est tronquée, d'où l'absence de précision.
|
| |
| | | | | | Les informations contenues dans ce document sont fournies par PC SOFT et ne peuvent être utilisées, reproduites ou diffusées sans l'accord écrit de PC SOFT. Malgré le soin apporté aux réponses, PC SOFT n'est PAS responsable des résultats de la mise en œuvre des réponses apportées. © PC SOFT 2004-2024. |
| |
| |
| |
| |
| |
| |
|
|
|