Question

Je suis probablement tout à fait tort, et je ne sais pas vraiment quoi que ce soit à ce sujet, mais j'ai une question sur les types de données nombre décimal dans les langages de programmation. Je comprends que les flotteurs ne sont pas tout à fait précis, car ils sont stockés en binaire avec une puissance ou quelque chose, mais je me demandais toujours pourquoi les types de données de nombre décimal ne stockent pas seulement un numéro comme s'il n'y avait pas décimal, donc faire des calculs comme s'il n'y avait pas une virgule, puis l'ajouter après. Comme dans cette situation:

2.159 * 3.507 --> 2159 * 3507 = 7571613
  ^^^     ^^^
  123     456

6 decimals in total... 7571613 -> 7.571613
                        ^^^^^^
                        654321

2,159 * 3,507 = 7,571613

Pourquoi ne peut-il fonctionner comme ça?

Était-ce utile?

La solution

C'est exactement ce qu'ils font. Un nombre à virgule flottante est stockée sous forme d'exposant. Supposons que nous travaillons sur un ordinateur décimal donc je ne dois pas changer tous ces chiffres en binaire.

Vous multiplions 2.159 * 3.507, mais en réalité 2.159 est stocké comme 2159 * 10^-3 et 3.507 est stocké comme 3507 * 10^-3. Étant donné que nous travaillons sur un système décimal, le 10 est supposé, donc nous ne devons vraiment stocker -3 sans 10, comme ceci: 2159,-3 ou 3507,-3. Le -3 est l'emplacement du « virgule flottante ». Que le point se déplace à gauche diminue en virgule flottante (.3507 est stockée en tant 3507,-4) et que le point se déplace de droite augmente à virgule flottante (35.07 est stockée en tant 3507,-2)

Lorsque vous multipliez les deux ensemble, le nombre décimal (ou le nombre binaire sur un ordinateur binaire) est la seule chose qui est multiplié. Le point flottant est ajouté Alors dans les coulisses ce qui se passe est:

2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6

7571613,-6 est juste 7571613 * 10^-6 (rappelez-vous que nous pouvons assumer le 10 parce que nous travaillons sur un ordinateur décimal) qui est le même que 7.571613.

Bien sûr, le point flottant ne doit pas être -3, il pourrait être quelque chose qui s'insère dans le stockage:

21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613

Et bien sûr, la plupart des ordinateurs ne stockent pas les choses en décimal, de sorte que les chiffres réels seraient tous en binaire, et le point flottant serait quelque chose comme 2^-9 -> -9 plutôt que 10^-3 -> -3. Mais vous avez l'idée.

Autres conseils

Il y a un bon nombre de mises en œuvre de l'arithmétique en virgule fixe. Cependant, nous courons souvent des décimales très, très rapidement avec le stockage de point fixe. Il est idéal pour les transactions monétaires, où nous savons que nous n'allons stocker / soucier des nombres irrationnels.

En outre, pour beaucoup d'autres choses, l'arithmétique point fixe juste ne vaut pas les frais généraux. virgule flottante est juste beaucoup plus rapide.

Les choses à lire:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top