En gros, un flottant s'écrit sous la forme 2^e (1+k.2^{-f}) où e est un entier (l'exposant) et k est un entier compris entre 0 et 2^f - 1. Chez les double, on prend f=52 (52 bits de mantisse pour représenter k, 11 bits pour représenter l'exposant et 1 pour le signe).
Par définition, 1ulp =2^{e-f} c'est à dire l'écart minimal entre deux flottants de même exposant.
Quand tu écris x=1.5, tu as e=0 et donc, pour les flottants correspondants, 1ulp=2^{-52} soit environ 2e-16.
Si maintenant tu considères x=3, tu as e=1 et donc pour les flottants correspondants, 1ulp=2^{1-52}=2^{-51} soit environ 4e-16. Etc.
La valeur d'un ulp dépend directement de l'exposant.
Une bonne façon de voir les flottants est le "râteau réglable". Je m'explique: le nombre de dents c'est 2^f (où f désigne toujours le nombre de bits de la mantisse), c'est donc fixé. Par contre, en jouant sur la valeur de e, tu peux modifier l'écart entre deux dents successives (en multipliant/divisant cet écart successivement par 2). Un ulp c'est l'écart entre deux dents pour un réglage e du râteau donné.
[^] # Re: Ne règle pas le "problème" du journa précédent
Posté par snowball (site web personnel) . En réponse au journal Le retour de la vengeance de la virgule flottante. Évalué à 1.
https://en.wikipedia.org/wiki/Unit_in_the_last_place
En gros, un flottant s'écrit sous la forme 2^e (1+k.2^{-f}) où e est un entier (l'exposant) et k est un entier compris entre 0 et 2^f - 1. Chez les double, on prend f=52 (52 bits de mantisse pour représenter k, 11 bits pour représenter l'exposant et 1 pour le signe).
Par définition, 1ulp =2^{e-f} c'est à dire l'écart minimal entre deux flottants de même exposant.
Quand tu écris x=1.5, tu as e=0 et donc, pour les flottants correspondants, 1ulp=2^{-52} soit environ 2e-16.
Si maintenant tu considères x=3, tu as e=1 et donc pour les flottants correspondants, 1ulp=2^{1-52}=2^{-51} soit environ 4e-16. Etc.
La valeur d'un ulp dépend directement de l'exposant.
Une bonne façon de voir les flottants est le "râteau réglable". Je m'explique: le nombre de dents c'est 2^f (où f désigne toujours le nombre de bits de la mantisse), c'est donc fixé. Par contre, en jouant sur la valeur de e, tu peux modifier l'écart entre deux dents successives (en multipliant/divisant cet écart successivement par 2). Un ulp c'est l'écart entre deux dents pour un réglage e du râteau donné.
En espérant avoir été clair.