7
votes

Attribuer une double constante à la variable flottante sans avertissement en C?

en langage de programmation C, la constante de point flottant est double type par défaut de
Donc, 3.1415 code> est double type, sauf si vous utilisez le suffixe 'F' ou 'F' pour indiquer le type de flotteur.

Je suppose const float pi = 3.1415 code> entraînera un avertissement, mais non. P>

Lorsque je les essaie sous GCC avec -Wall: p>

f: 3.141593  
d: 3.141593  
f: 3.141593  
i: 3


0 commentaires

3 Réponses :


2
votes

% f peut être utilisé avec float et double . Si vous souhaitez plus d'utiliser plus de précision xxx

et c'est ce qui se passe sous la hotte: xxx


2 commentaires

Cela ne devrait-il pas être % lf pour un double?


@sharth: lf et f sont différents pour scanf mais identique dans printf



6
votes

-wall ne permet pas d'avertir des avertissements sur la perte de précision, de la troncature des valeurs, etc. Parce que ces avertissements sont ennuyeux et "la fixation" nécessite d'encombrer le code correct avec des tas de moulages laids. Si vous souhaitez des avertissements de cette nature, vous devez leur permettre explicitement.

Aussi, votre utilisation de printf n'a rien à voir avec la précision des variables réelles, juste la précision printf est imprimée à 6 places après la point décimal.


3 commentaires

La nature variable de printf garantit que les flotteurs sont implicitement couplés aux doubles lorsqu'il est passé?


Oui, bien que cela soit plutôt sans rapport avec la question de OP.


Je me demande, ce qui est plus grand: le nombre d'erreurs qui «perte de précision éventuelle de la précision du double à flotter» se détendent ou le nombre d'erreurs qui résultent lorsque Code un programmeur qui doit explicitement forcer beaucoup de choses à float Pour rendre le compilateur heureux, forces également à Float quelque chose qui n'aurait pas dû être [par exemple Const float onomeh = 1.0f / 10.0f; VALEUR DE FLOAT1 = 8.0F * ONETHIÈME; Double Value2 = 4.0f * -etih; Notez que si onome- aurait pu être double , tout aurait fonctionné parfaitement.



2
votes

Si vous voulez obtenir des avertissements pour cela, je pense que -wonversion les signale dans Mainline GCC-4.3 et ultérieure.

Si vous utilisez OS X, -WSHORTEN-64-TO 32 a marqué dans la GCC d'Apple depuis GCC-4.0.1. Je crois que Clang correspond cependant au comportement Mainline GCC.


0 commentaires