Damall a écrit : ↑26 août 2022, 14:43
Apparemment l'utilisation des variables de type REAL doit se restreindre à 2 chiffres après la virgule.
Mon incrément de 0,001 ne passe pas.
C'est un peu plus compliqué que ça.
Les réal sont codés avec, selon leur "taille", un certain nombre de bits qui servent a coder la position du zéro (l'exposant), et le reste des bits qui sert a coder les chiffres "signifiants".
quand tu additionne une valeur qui est très petite a une qui est très grande, la petite est trop "loin" de la virgule de la grande, du coup elle n'est pas "significative" par rapport a la grande, elle est plus petite que l'arrondi de la grande valeur et du coup ça revient a additionner zéro.
En utilisant des LREAL tu peut rencontrer le même problème, tu l'aura juste une fois que ton "grand" nombre aura atteints une valeur beaucoup plus grande.
De manière générale avec les flottants quand tu fait des calculs, plus les exposants des valeurs de ton calcul sont éloignés, plus tu a une "grosse" erreur d'arrondi. Et quand tu fait beaucoup de calculs a la suite tu risque d'avoir un résultat avec un arrondi dégueulasse, voire complétement faux.
https://fr.wikipedia.org/wiki/Virgule_flottante
edit:
Pour faire plus simple, pour n'importe quel processeur (1*10^32) + (1*10^-3), bah ca fait 1*10^32
Et un matheux te dira que c'est pas tout a fait vrai, mais osef, on va dire que c'est bon.