squalyl> ha il est de toi le tuto? hum merde ok

mais ouais, cf le post de 0^2

Je peux me tromper, mais pour autant que je sache, la virgule flottante (à opposer à la virgule fixe) essaie d'adapter la précision au mieux de ce qu'on lui demande de représenter.Donc si la partie entière est grande, il reste moins de place pour le reste (la partie décimale).
oui, mais le nombre de bits pour les digits de ton nombre reste constant peu importe la "grandeur" de ta valeur.
sur un float ieee754 32 bits, t'as 23 bits pour les digits (plus un bit silencieux toujours a '1', sauf dans quelques rares cas (les "denormals" dont je parlais dans mon post au dessus), 8 bits pour l'exposant (qui est stocke avec un bias, mais c'est un detail), et un bit pour le signe.
peu importe si tu divise avant ou apres de multiplier, tu aura quand meme 23 bits de precision.
ce qui peut faire perdre ou gagner de la precision c'est par quel nombres tu multiplies ou divise, du a des erreurs d'arrondis au niveau 23 eme bit.
mais tu pourrais tres bien avoir un arrondi moins bon en multipliant avant qu'en divisant avant.
exemple bete de en quoi ca change rien:
1.75f => exposant = 0 (store dans le float en tant que 127), mantisse = (1)11000000000000000000000
on multiplie 1.75f par 2^80 => exposant = 80, mantisse = (1)11000000000000000000000, ie: exactement la meme
on divise par 2^100 => exposant = -20, mantisse = tjrs pareil
peu importe la "grandeur" de ton nombre, ce qui va determiner le gain ou perte de precision, c'est la mantisse, qui reste parfaitement fixe.
par contre c'est une toute autre histoire des que tu fais des add ou des mul.
un classique:
for (float t = 0; t < 1.0e+5f; t += 1.0e-4f) ;
=> boucle infinie
ca devrait iterer 1.0e+9 fois.
saut qu'il faut plus de 23 bits pour stocker '1.0e+5' plus ou moins un increment de '1.0e-4'
donc la boucle tourne et incremente 't', jusqu'au moment, quelquepart entre t=1.0e+2 et t=1.0e+3, ou un add provoque l'increment de trop de l'exposant de 't', qui fait que tous les add suivants n'auront aucun effet, et donneront juste 't'
donc la boucle tournera a l'infini, comme si on ajoutait 0 a t a chaque iteration.
mais la encore, pour les mul et les divs, le pbl n'a rien a voir

c'est les exposants qui s'additionnent et se soustraient, les mantisses sont combinees totalement independamment des exposants d'origine.
donc que tu multiplie 1.10111010100011101010011 exp 12345 avec 1.01010101110001010100101 exp -4567
OU 1.10111010100011101010011 exp 12345 avec 1.01010101110001010100101 exp 345667
ca te donnera exactement les memes bits de mantisse, donc la meme precision si tu le remultiplie ou divise apres par un autre nombre, juste un exposant different.
