Je ne comprends tout simplement pas les nombres à virgule fixe et à virgule flottante, car il est difficile de lire les définitions les concernant dans Google. Mais aucune de celles que j'ai lues ne fournit une explication assez simple de ce qu’elles sont réellement. Puis-je obtenir une définition simple avec un exemple?
Un nombre à virgule fixe a un nombre spécifique de bits (ou chiffres) réservé à la partie entière (la partie située à gauche du point décimal) et un nombre spécifique de bits réservés à la partie décimale (la partie située à droite de la virgule) point). Que votre nombre soit petit ou grand, il utilisera toujours le même nombre de bits pour chaque partie. Par exemple, si votre format de point fixe était en décimal IIIII.FFFFF
alors le plus grand nombre que vous pourriez représenter serait 99999.99999
et le plus petit nombre non nul serait 00000.00001
. Chaque bit de code qui traite de tels nombres doit avoir une connaissance intégrée de l'emplacement du point décimal.
Un nombre à virgule flottante ne réserve pas un nombre spécifique de bits pour la partie entière ou la partie fractionnaire. Au lieu de cela, il réserve un certain nombre de bits pour le nombre (appelé le mantisse ou significande) et un certain nombre de bits à dire où dans celui-ci nombre la place décimale se trouve (appelé le exposant). Ainsi, un nombre à virgule flottante de 10 chiffres avec 2 chiffres réservés pour l'exposant peut représenter la plus grande valeur de 9.9999999e+50
et une plus petite valeur non nulle de 0.0000001e-49
.
Un nombre à virgule fixe signifie simplement qu'il y a un nombre fixe de chiffres après la virgule décimale. Un nombre à virgule flottante autorise un nombre variable de chiffres après le point décimal.
Par exemple, si vous avez une façon de stocker des nombres qui nécessite exactement quatre chiffres après le point décimal, il s'agit alors d'un point fixe. Sans cette restriction, c'est une virgule flottante.
Souvent, lorsque le point fixe est utilisé, le programmeur utilise en fait un entier et suppose ensuite que certains chiffres sont au-delà du point décimal. Par exemple, je souhaiterais peut-être conserver deux chiffres de précision. Ainsi, une valeur de 100 signifie en réalité 1,00, 101 en 1,01, 12345 en 123,45, etc.
Les nombres en virgule flottante ont une utilité plus générale car ils peuvent représenter de la même manière de très petits ou de très grands nombres, mais le fait d’avoir un espace de stockage supplémentaire pour la position de la virgule présente une petite pénalité.
À ma connaissance, l’arithmétique en virgule fixe est effectuée à l’aide d’entiers. où la partie décimale est stockée dans un nombre fixe de bits, ou le nombre est multiplié par le nombre de chiffres de précision décimale nécessaires.
Par exemple, si le nombre 12.34
doit être stocké et nous n'avons besoin que de deux chiffres de précision après le point décimal, le nombre est multiplié par 100
obtenir 1234
. Pour effectuer des calculs sur ce nombre, nous utilisions cet ensemble de règles. Ajouter 5620
ou 56.20
à ce nombre donnerait 6854
en données ou 68.54
.
Si nous voulons calculer la partie décimale d'un nombre à virgule fixe, nous utilisons l'opérande modulo (%).
12.34 (pseudocode):
v1 = 1234 / 100 // get the whole number
v2 = 1234 % 100 // get the decimal number (100ths of a whole).
print v1 + "." + v2 // "12.34"
Les nombres en virgule flottante sont une histoire complètement différente dans la programmation. La norme actuelle pour les nombres à virgule flottante utilise quelque chose comme 23 bits pour les données du nombre, 8 bits pour l'exposant et 1 sauf pour le signe. Voir ce lien Wikipedia pour plus d'informations à ce sujet.
Le terme "point fixe" fait référence à la manière correspondante dont les nombres sont représentés, avec un nombre fixe de chiffres après et parfois avant le point décimal. Avec une représentation en virgule flottante, l’emplacement du point décimal peut "flotter" par rapport aux chiffres significatifs du nombre. Par exemple, une représentation en virgule fixe avec une convention uniforme de placement de virgule décimale peut représenter les nombres 123,45, 1234,56, 12345,67, etc.