60 votes

But d'un ".f" joint à un numéro?

J'ai vu "1/3.f" dans un programme, et je me demandais à quoi était destiné le ".f". Alors essayé mon propre programme:

Est-ce que le .f est utilisé comme un casting? N'importe quel endroit où je peux en savoir plus sur cette syntaxe intéressante?

66voto

peoro Points 12875

est équivalent à, c'est un double.

``suivant un nombre littéral en fait un flotteur.

53voto

wich Points 7276

Sans l' .f le nombre obtient interprété comme un entier, par conséquent 1/3 est (int)1/(int)3 => (int)0 , au lieu de l'souhaité (float)0.333333. L' .f indique au compilateur d'interpréter le sens littéral comme un nombre à virgule flottante de type float. Il y a d'autres constructions comme, par exemple, 0UL ce qui signifie un (unsigned long)0, alors qu'un simple 0 serait un (int)0.

L' .f est en fait constitué de deux composants, l' . qui inicates que le littéral est un nombre à virgule plutôt qu'un entier, et l' f suffixe qui indique au compilateur le littéral doit être de type float plutôt que la valeur par défaut de type double utilisé pour la virgule flottante littéraux.

Avertissement; le "cast construire" utilisé dans l'explication ci-dessus n'est pas une réelle moulé, mais juste une façon d'indiquer le type de littéral.

Si vous voulez tout savoir sur les littéraux et les suffixes vous pouvez utiliser, vous pouvez lire la norme C++, (1997 projet,) ou bien de jeter un oeil à un décent pour les manuels scolaires, comme de Stroustrup Le Langage de Programmation C++ .

En aparté, dans votre exemple, (float)1/3 le littéraux 1 et 3 sont en fait des entiers, mais le 1 est tout d'abord converti en float par votre plâtre, puis par la suite le 3 devient implicitement converti en float parce que c'est un opérande de droite de la virgule flottante de l'opérateur. (L'opérateur virgule flottante parce que c'est l'opérande de gauche est en virgule flottante.)

Edit: a étendu un peu sur le sens exact de l' .f et inclus les liens vers d'autres documents.

22voto

Nawaz Points 148870

Par défaut 3.2 est considérée comme double; donc, pour forcer le compilateur à la traiter en float, vous devez écrire f à la fin.

Il suffit de voir ce intéressant de démonstration:

float a = 3.2;
if ( a == 3.2 )
    cout << "a is equal to 3.2"<<endl;
else
    cout << "a is not equal to 3.2"<<endl;

float b = 3.2f;
if ( b == 3.2f )
    cout << "b is equal to 3.2f"<<endl;
else
    cout << "b is not equal to 3.2f"<<endl;

Sortie:

a n'est pas égal à 3,2
b est égal à 3,2 f

Faire l'expérience ici au ideone: http://www.ideone.com/WS1az

Essayez de changer le type de la variable a de float de double, voir le résultat de nouveau!

10voto

jcoder Points 14982

3.f est court pour 3.0f - le nombre 3.0 comme un point flottant littéral de flotteur de type.

3voto

CashCow Points 18388

Le point décimal et le f ont un but différent de sorte qu'il n'est pas vraiment .f

Vous devez comprendre que le C et le C++ tout ce qui est tapé, y compris les littéraux.

3 est un littéral entier. 3. est un littéral double 3.f est un littéral du flotteur.

IEEE flotteur a moins de précision que d'un lit double. flotteur utilise uniquement 32 bits, avec un 22 bits de mantisse et 10 bits d'exposant (y compris le signe bits de chaque).

double vous donne plus de précision, mais parfois vous n'avez pas besoin d'une telle précision (par exemple, si vous faites des calculs sur des chiffres qui ne sont que des estimations, en premier lieu) et celle donnée par le flotteur est suffisant, et si vous stockez un grand nombre d'entre eux (par exemple le traitement d'un grand nombre de séries chronologiques de données) qui peut être plus important que l'exactitude.

Ainsi, le flotteur est encore une catégorie utile.

Vous ne devez pas confondre avec la notation utilisée par les printf et les états équivalents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X