Ces lignes sont identiques?
float a = 2.000000f;
4 Réponses :
Oui, c'est. Quelle que soit la représentation que vous utilisez, lorsque le code est compilé, le numéro sera converti en une représentation binaire unique. Il n'y a qu'une seule façon de représenter 2 code> dans le IEEE 754 BINARY32 Standard utilisée dans les ordinateurs modernes pour représenter
float code>. p>
Cependant, il existe d'autres normes (je pense à IBM 360) toujours en cours d'utilisation où les chiffres ont plusieurs représentations ... (Je ne sais pas si 2 est l'un d'entre eux, bien que)
IEEE 754 permet de représenter plusieurs représentations de la même valeur, notamment en point variant décimal. Par exemple, 2 pourrait être, en effet, 2e0 et 20e-1. Cependant, les textes de source "2.0F" et "2.000000F" sont peu susceptibles de donner lieu à des représentations différentes, et il n'y a pas de différence de valeur mathématique.
Mais les programmes informatiques n'utilisent pas du tout les représentations décimales et dans des représentations binaires, vous ne pouvez pas faire cela, car il existe un 1. Code> a été ajouté à la fraction i> partie de le nombre. J'ai édité la réponse pour préciser que la représentation binaire32 est utilisée.
Si un programme utilise un point flottant décimal ou non dépend de la mise en œuvre C (ou autre langue). Il est tout simplement faux de dire que les programmes d'ordinateur ne les utilisent pas. Pourquoi d'autre existeraient-ils?
Oui, c'est sûr que c'est le même supplément de zéros à droite sont ignorés, aime simplement les zéros à gauche p>
En fait, les zéros à gauche font une différence.
00002.0 est similaire à 02.0 Aucune différence à moins que jeûne ou quelque chose
@Shéhabox, ce que David signifiait (ou donc je pensais) était que 010 est différent de 10. Le premier est de 8 en décimal et ce dernier est 10.
Oui, ils sont les mêmes.
Vérification simple:
http://codepad.org/foqsufb4 p> ^ Va sortir 1 (vrai) p> p>
Eh bien, prouve qu'un compilateur exemplaire n'est pas une preuve. (Votre réponse est bien sûr correcte, mais le chèque n'est pas une preuve.)
Vous avez raison, j'aurais dû utiliser un libellé différent. Cela semblait suffisant dans ce cas, cependant. La norme IEEE pourrait être référencée pour une réponse plus approfondie.
La seule chose que la norme C99 a à dire à ce sujet est celle-ci (section 6.4.4.2): p>
pour les constantes de flottement décimales ... Le résultat est soit la valeur représentable la plus proche, ou la valeur représentative plus grande ou plus petite immédiatement Adjacent à la valeur représentable la plus proche, choisie de manière définie par la mise en œuvre. P> blockQuote>
Ce bit sur "défini par la mise en œuvre" signifie que techniquement une implémentation pourrait choisir de faire quelque chose de différent dans chaque cas. Bien que dans la pratique, rien de bizarre ne se produise pour une valeur comme 2. P>
Il est important de garder à l'esprit que les normes C ne nécessitent pas IEEE-754. P>
Maintenant, si IEEE-754 est B> utilisé, le nombre 2 code> est exactement représentable et ses voisins ("la plus grande ou la plus petite valeur représentable immédiatement adjacente à la valeur représentable la plus proche") sont
1.99999988 code> et
2.00000024 code>. Nous pouvons voir que le voisin à droite est deux fois plus loin, car nous avons un peu moins pour la partie fractionnée lorsque nous passons à la suivante "Duade"
2.0 code> à
4.0 code >.
Si (2.0f == 2.000000F), alors oui.
Eh bien, que se passe-t-il si vous essayez cela? Avez-vous regardé la sortie du compilateur?
S'il vous plaît, essayez d'abord alors demander
Essayer simplement d'essayer rarement de vous donner des réponses définitives en C ou C ++.
Il ne s'agit pas de savoir si
2.0f code> est égal à
2.000000F code>, mais la question générale de savoir si ces représentations différentes ont une influence sur l'exécutable ou non. Et le fait que sur une machine utilisant un compilateur, aucune différence ne signifie pas que ce sera toujours vrai sur les drapeaux de plate-forme / compilateur / compilation.
La règle numéro un sur de même pour répondre à la question de l'effondre poliment i>. Wanna Go Re-Lister le FAQ ? Nous sommes ici pour répondre aux questions, pas pour exiger la preuve ou quoi que ce soit d'autre.