Vous ne vous êtes peut-être jamais posé la question, mais les ordinateurs manipulent principalement deux types de nombres : les nombres entiers et les nombres flottants. Si les premiers sont un simple encodage en binaire - soit en base 2 pour les plus matheux - ils sont parfois limités sur leur valeur maximum / minimum (sur un système 64-bits, on encode au mieux des nombres de 0 à  264 - 1 = 18 446 744 073 709 551 999, ce qui peut sembler grand... Mais ne l'est pas tellement pour un CPU qui peut faire des milliards d'opérations par seconde !), et surtout ne peuvent pas représenter de nombre à virgule. Pour pallier à ce dernier point, on peut utiliser la représentation entière puis diviser le nombre par un facteur constant : on appelle cela la représentation en virgule fixe. Par exemple, avec un facteur de division de 1000, un système 64-bit représente les nombres de 0 à 18 milliards de milliards tous les 0,001 (pas fixe, d'où le nom).

 

Cependant, impossible toujours de représenter des nombres très grands, ni très petits. D'où l'idée de la virgule flottante : représenter un nombre par une partie entière nommée mantisse multipliée par un nombre fixe, lui même mis à la puissance d'un second nombre entier (possiblement négatif) nommée exposant, ici "2" : N = mantisse * 2exposant. Avec ce système, la plupart des soucis de représentations sont réglés... au détriment d'une complexité des calculs accrue. De plus, des cas limites se présentent tels la représentation de l'infini, de zéro et des NaN (Not a Number, apparaît lorsque le calcul a sérieusement foiré quelque part) : il faut donc une norme pour gérer tout ça.

 

Et cette norme, c'est l'IEEE 754. Rédigée pour sa première version en 1985, elle décide de la répartition entier / mantisse et, justement, de la gestion des cas pathologiques. Cette dernière avait été mise à jour en 2008, et vient de voir une révision en cette année de grâce 2019.

 

StandardNormeBits de mantisseBits d'exposant
IEEE 754 float64 53 11
IEEE 754 float32 24 8
IEEE 754 float16 11 5
Intel bfloat16 8 8

Comparaison des flottants, le bloat16 (Brain Float) étant développé pour le machine learning dans les derniers FPGA bleus

 

Le document coût la bagatelle de 99$, et stipule désormais quelques nouvelles fonctions : tanPi, aSinPi et aCosPi qui sauront ravir les scientifiques ou développeurs hardcores, mais surtout quelques corrections concernant la gestion du NaN : désormais, le maximum ou minimum d'un couple (nombre, NaN) sera lui aussi NaN. Logique, non ? Ce n'est pourtant pas le comportement du SSE et de l'AVX... qui ne correspond pas non plus à la norme de 2008 soit dit en passant ! Du coup, pas bientôt dans nos CPU, cet IEEE 754-2019 ? (Source : Agner Fog)

 

nan cat cdh

Au secours ! C'est le NaN cat !

 Le NaN, ça vous parle ? Désormais, c'est encore mieux géré ! 

Sur le comptoir, au même sujet

 

afficher plus de prixAffichez donc moi tout, nom de nom

Plus d'infos avec le comptoir de l'info


Les 12 Ragots
   
Les ragots sont actuellement
ouverts à tous, c'est open bar !