Quelle est la différence entre “1.0 f” et “1.f”?

Comme un adorateur de John Carmack, j'ai été la lecture de l'Id Tech à la disposition du public des Conventions de Codage du document (ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc si vous êtes intéressés), et est venu à travers une convention, je n'ai pas tout à fait comprendre:

Utiliser spécification de la précision pour les valeurs à virgule flottante, sauf si il y a un besoin explicite pour une chambre double.

float f = 0.5f

Au lieu de

float f = 0.5;

Et

float f = 1.0f;

Au lieu de

float f = 1.f;

Comment sont-ils différents?

Je peux comprendre la différence entre les deux dans le premier exemple (le dernier en faisant un double-à-flotteur de conversion sous le capot), bien que je serais suspect, il suffit qu'un stupide compilateur pour attraper et produirait le même bytecode, pour non exécution de la différence.

Mais est-il des cas où l'ajout de fuite de 0 pour votre valeur en virgule flottante déclaration change les choses?

Il se sent plus comme une faute de frappe dans le contexte, depuis les deux les deux ont une spécification de la précision. 1.0 f est encore plus lisible.
L'auteur a sans doute voulu donner à penser float f = 1.0f; au lieu de float f = 1.0;; la présence ou l'absence de la f suffixe est le point. (Et il est généralement préférable d'utiliser double plutôt que float de toute façon.)
Un bon compilateur doit avertir si vous initialisez un float avec double constante dont la valeur change lors de la conversion à float, mais il ne devrait pas, en règle générale, de produire le même code que si la constante a été suivie par f. C'est parce qu'il y a certains chiffres qui sont différents lors de la première converti à double puis à float que lorsqu'il est converti directement à float. Il serait inhabituel pour un programmeur d'utiliser ces intentionnellement, mais c'est un usage légitime de la langue, et devraient être compilé comme indiqué.

OriginalL'auteur Ben Walker | 2013-02-24