J'ai eu quelques questions sur la mise en place de F code> à côté des valeurs littérales. Je sais que cela le définit comme un float code> mais j'en ai vraiment besoin?
Est-ce 2.0f * 2.0f code> tout plus rapide ou compilé différent de celui de 2.0 * 2.0 code>? Est une déclaration comme flottant A = 2.0; code> compilé différemment de flottant A = 2.0f; code>? P>
3 Réponses :
Je suis rarement sur la vitesse (au moins directement), mais le fait qu'autrement, le compilateur mettra en garde sur la conversion double code> à float p>. p>.
Ok mais sur l'exemple A * 2.0 est-ce que c'est vraiment en utilisant une double multiplication?
En théorie, je pense que cela devrait entraîner la multiplication de deux double code> S, qui convertissant le résultat à un float code>. En réalité, avec elle étant 2.0, il y a de fortes chances que le compilateur puisse compiler pour pouvoir utiliser float code>. OTOH, il existe des limites obligatoires sur l'optimisation des mathématiques FP (en particulier en C99), ce qui la rend explicite pourrait aider.
Oui, j'utilisais juste 2.0 à titre d'exemple. Merci pour l'aide.
Parfois, il s'agit également d'une précision. En supposant que vos noms variables ne reflètent pas leurs types, 2,0f avertit en fait quiconque lisant le code qu'ils doivent garder à l'esprit le fait qu'ils traitent avec un flotteur et non un double. Cela devient une connaissance pratique lors du débogage des choses comme des boucles avec beaucoup de comparaisons en eux.
Parfois, vous en avez besoin pour explicitement avoir de type float code>, comme dans le cas suivant float f = ...;
float r = std::max(f, 42.0); // won't work; (float, double).
float r = std::max(f, 42.0f); // works: both have same type
Depuis ce que j'ai lu, le processeur iPhone est un Arm1176 avec le FPU optionnel fourni (voir ici: arras.com/products/products/processors/technologies/... ); Je ne suis pas un expert, mais je ne pense pas que la vitesse change beaucoup avec des flotteurs / doubles dans ce cas. Mon seul préoccupation est qu'il a "16 régis à double précision ou 32 registres de précision unique", il suffit d'utiliser uniquement des floats que vous pouvez gagner quelque chose des registres supplémentaires, mais cela peut également dépendre de la manière dont l'environnement est mis en place.
Eh bien, je sais que vous pouvez mais sur le double iPhone est définitivement plus lent puis flotter.
Le seul moyen de savoir est le profilage. Quoi qu'il en soit, si vous voulez aller en sécurité et que vous n'avez pas besoin de la précision supplémentaire des doubles, utilisez simplement des flotteurs.
S'avère que quelqu'un d'autre avait déjà une question similaire: jeter un coup d'œil à
Vous voulez dire "valeurs littérales", pas "noms variables".
2.0 code> est undouble code> valeur littérale.2.0f code> est unfloat code> valeur littérale.2 code> est une valeur littéraleint code>. Aucun de ceux-ci n'est des variables.Désolé, je ne voulais pas ressembler à ce que je me plaisait là ... J'aurais probablement dû vouloir éditer le corps silencieusement.