Question

Y at-il compilateur qui a une directive ou d'un paramètre pour lancer le calcul entier flotter implicitement. Par exemple:

float f = (1/3)*5;
cout << f;

le "f" est "0", parce que les constantes de calcul (1, 3, 10) sont des nombres entiers. Je veux convertir le calcul entier avec une directive de compilateur ou d'un paramètre. Je veux dire, je ne vais pas utiliser la coulée explicite ou préfixe « .F » comme ça:

float f = ((float)1/3)*5;

ou

float f = (1.0f/3.0f)*5.0f;

Connaissez-vous c / c ++ compilateur qui a un paramètre à faire ce processus sans coulée explicite ou une chose de « .F »?

Était-ce utile?

La solution

Si vous ne voulez pas non plus des deux méthodes que vous avez mentionné, vous êtes probablement hors de la chance.

Qu'est-ce que vous espérez accomplir avec cela? Tout opérateur spécialisé qui a fait « flotter-division » devrait convertir ints de flotte à un moment donné après tokens, ce qui signifie que vous n'allez obtenir aucun avantage de performance sur l'exécution.

Autres conseils

Tout compilateur qui fait ce que vous voulez ne serait plus un conforme compilateur C ++. La sémantique de la division entière sont bien spécifiées (au moins pour les nombres positifs), et vous proposez de changer cela.

Il serait également dangereux car il finirait par appliquer à tout, et vous pourriez avoir à un moment donné du code qui repose sur l'arithmétique des entiers standard, ce qui serait en silence invalide. (Après tout, si vous aviez des tests qui attraper, vous auriez sans doute des tests qui l'arithmétique attraper entier non désiré.)

Alors, le seul conseil que j'ai est d'écrire des tests unitaires, ont des revues de code, et essayer d'éviter les nombres magiques (au lieu de les définir comme const float).

En C ++, il est un peu étrange de voir un tas de valeurs numériques arrosées par le code. il est généralement considéré comme la meilleure pratique de déplacer les « nombres magiques » comme ceux-ci à leur propre valeur flottante const statique, ce qui élimine ce problème.

Non, ces deux options sont les meilleurs que vous avez.

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