38 votes

Comment est-à virgule flottante stockées? Quand est-il de la matière?

Le suivi de cette question, il semble que certains numéros ne peuvent pas être représentés en virgule flottante à tous, et au lieu de cela sont approximatives.

Comment sont des nombres à virgule flottante stockées?

Est-il une norme commune pour les différentes tailles?

Ce genre de pièges ai-je besoin pour regarder dehors pour si j'utilise la virgule flottante?

Sont-ils de la croix-langue compatible (c'est à dire, que les conversions ai-je besoin pour traiter d'envoyer un nombre à virgule flottante à partir d'un programme en python pour un programme C sur TCP/IP)?

27voto

Rob Pilkington Points 344

Comme mentionné, l' article de Wikipedia sur la norme IEEE 754 fait un bon travail de montrer comment les nombres à virgule flottante sont stockés sur la plupart des systèmes.

Maintenant, voici quelques pièges courants:

  • Le plus important est que vous presque jamais voulez comparer deux nombres en virgule flottante pour l'égalité (ou l'inégalité). Vous aurez envie d'utiliser plus de/moins de comparaisons à la place.
  • Le plus d'opérations que vous faites sur un nombre à virgule flottante, la plus importante des erreurs d'arrondi peuvent devenir.
  • La précision est limitée par la taille de la fraction, de sorte que vous pouvez ne pas être en mesure d'ajouter correctement des nombres qui sont séparées par plusieurs ordres de grandeur. (Par exemple, vous ne serez pas en mesure d'ajouter 1E-30 à 1E30.)

12voto

ChrisN Points 10734

Une explication approfondie des problèmes liés à des nombres à virgule flottante est donné dans l'article , Ce que Tout informaticien Devez Savoir à Propos de l'Arithmétique à virgule Flottante.

6voto

Knox Points 1543

Quant à la deuxième partie de votre question, à moins que la performance et l'efficacité sont importants pour votre projet, alors je vous suggère de transférer les données à virgule flottante comme une chaîne de caractères au-dessus de TCP/IP. Cela vous permet de vous éviter des problèmes tels que l'alignement d'octets et de faciliter le débogage.

5voto

erickson Points 127945

La norme IEEE 754.

Bien sûr, il existe d'autres moyens de stocker des nombres lorsque IEE754 n'est pas assez bon. Les bibliothèques comme Java BigDecimal sont disponibles pour la plupart des plates-formes et correspondent bien à SQL du type de numéro. Les symboles peuvent être utilisés pour les nombres irrationnels, et les ratios qui ne peuvent pas être correctement représenté en binaire ou décimal à virgule flottante peuvent être stockées sous forme de ratio.

4voto

Craig H Points 4224

Fondamentalement, ce que vous avez besoin de s'inquiéter à propos de nombres à virgule flottante est qu'il y a un nombre limité de chiffres de précision. Cela peut causer des problèmes lors de l'essai pour l'égalité, ou si votre programme a besoin de plus de chiffres significatifs que ce que le type de données vous donner.

En C++, une bonne règle de base est de penser qu'un flotteur vous donne 7 chiffres de précision, alors qu'un double vous donne 15. Aussi, si vous êtes intéressés à savoir comment tester l'égalité, vous pouvez regarder cette question thread.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X