En fait j'aurai besoin d'explications concernant les nombres decimaux, leur declaration, leur arrondi (0.00123456 => 0.0012), leur utilisation dans une boucle "for next" et globalement tout ce qu'il y a a savoir sur ces bêtes là en pure basic.
il y a sans doute de quoi discuter pendant longtemps surtout concernant les arrondis, les normes d'arrondi etc...
mais pour faire simple voilà déjà quelques infos :
1/
Les nombres à virgule (les flottants) ne sont pas autorisés (en purebasic) dans les boucles FOR NEXT, il faut un entier (n'est ce pas dobro). Ceci dit une boucle FOR NEXT se simule facilement avec un WHILE WEND ou un REPEAT UNTIL.
2/
Il y a 2 types de flottants :
les FLOATS sur 32bits
les DOUBLES sur 64bits (bcp + précis)
3/
Ils se déclarent comme suit :
monFlottant32.f = 123.456 ; FLOAT
monFlottant64.d = 123456.789 ; DOUBLE
Parallèlement on a la même chose pour les entiers :
non ce n'est pas bizarre, çà s'appelle une erreur d'arrondi (cf mon message juste au dessus disant 1000*0.1 != 1.000
Informations concernant les nombres flottants
Un nombre flottant est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker de grands nombres avec une précision aussi élevée que des petits nombres.
Une autre limitation concernant les nombres flottants est qu'ils restent concrètement représentés sous une forme binaire. Ainsi, ils ne peuvent être restitués qu'à partir de multiples et de divisions en base 2. Celà est important pour comprendre que la représentation décimale lors de l'affichage ou du calcul n'est pas tout à fait identique à ce que l'on peut attendre dans une représentation humaine. Représenter 0.5 ou 0.125 est simple car ce sont des divisions parfaites de 2, cela est plus complexe pour des nombres comme 0.11 ou 0.10999999. L'affichage approché de la valeur est toujours correct à un nombre limité de décimales, mais ne soyez pas surpris si au-delà le nombre affiché s'écarte de la valeur que vous attendez!
Ces remarques s'appliquent aux nombres flottants traités par ordinateur d'une manière générale et non spécifiquement à Purebasic.
Comme leur nom l'indique, les 'doubles' sont des flottants 'double-precision' (64 bits) comparativement aux flottants 'simple-precision' que sont les floats (32 bits). Donc, pour avoir plus de précision dans la manipulation des nombres à virgule, il est préférable d'utiliser les 'doubles'.
c'est un vrai-faux problème récurrent en informatique.
les calculs sur des flottants sont arrondis selon des règles normées qui aboutissent à ce genre de résultats, c'est comme çà quelque soit le langage.
c'est ce qu'explique minirop avec la norme IEEE 754