Lorsque l’on parle de puissance de calcul en informatique, la notion de flops revient sur le tapis. Il s’agit du « Floating-point operations per second » ou nombre d'opérations en virgule flottante par seconde en français. Mais attention, cette valeur n’est pas dissociable du nombre de bits associés, du niveau de « précision » et de la plage dynamique. De quoi s’agit-il ? On vous l'explique.
Rapide révision : bit, byte et octet
Avant d’attaquer les nombres à virgule flottante, commençons par un rappel important : les ordinateurs ne connaissent pas les virgules et leur langage se limite à deux « mots » : 0 et 1. On parle de bit – contraction de binary digit. On ne peut pas aller bien loin… sauf à les regrouper pour multiplier les possibilités.
C’est ainsi qu’on arrive à l’octet, très largement utilisé en informatique. Il s’agit d’un regroupement de 8 bits. Petite digression toujours utile : ne pas confondre le bit (notation b) avec le byte (notation B) qui vaut dans la grande majorité des cas 8 bits (même si ce n’est pas une obligation). Un octet (ou byte) peut donc représenter 2⁸ ou 256 valeurs différentes (on parle généralement de nombre allant de 0 à 255). En termes de bit cela donne 00000000, 00000001, 00000010, 00000011, 00000100… 11111110 et enfin 11111111.
On commence doucement avec les entiers…
Parlons des nombres entiers, ou integer en anglais, souvent abrégé INT en langage informatique. Il faut définir certaines limites, ne serait-ce que pour des questions d’allocation de mémoire. C’est là qu’entrent en jeu les types INT8, INT16, INT32 ou encore INT64.
Le nombre correspond à la quantité de bits disponible. INT8 est ainsi un entier sur 8 bits. Les 256 possibilités sont réparties de -128 à 127 (on n’oublie pas de compter le 0 pour arriver au total de 256). En INT16, on va de - 32 768 à 32 767.
De manière générale, la plage pour un entier sur n bits se trouve via la formule suivante : de -2^(n-1) à +2^(n-1) -1. Pour simplifier, on place la moitié des chiffres dans les négatifs et l’autre moitié dans les positifs (en comptabilisant le 0 avec les positifs).
Une particularité intéressante de ce classement est d’avoir tous les positifs avec un 0 comme premier bit, tandis que les négatifs commencent tous par un 1 ; c’est bien pratique pour réaliser des opérations par la suite.
Pour résumer, voici une liste d'entiers sur 4 bits avec 2⁴ ou 16 possibilités :
- 0000 = 0
- 0001 = 1
- 0010 = 2
- 0011 = 3
- 0100 = 4
- 0101 = 5
- 0110 = 6
- 0111 = 7
- 1000 = -8
- 1001 = -7
- 1010 = -6
- 1011 = -5
- 1100 = -4
- 1101 = -3
- 1110 = -2
- 1111 = -1
…qui peuvent ne pas être signés (et donc uniquement positifs)
Il existe aussi les entiers non signés (ou uINT). Dans ce cas, on supprime les nombres négatifs de la liste et on double les possibilités sur les positifs. Une variable uINT8 peu ainsi osciller entre 0 et 255 (là encore, on n’oublie pas de compter le 0 pour un total de 256). Le choix du type de variable dépend ainsi des besoins.
D’autres noms sont également utilisés. Microsoft indique par exemple qu’en C# les entiers sur 8 bits sont des sbyte, ceux sur 16 bits des short, sur 32 bits des int et sur 64 bits des long. On a aussi les versions non signées (uINT) avec respectivement byte, ushort, uint et ulong.