Pourquoi une valeur à virgule flottante comme 3.14 est-elle considérée comme double par défaut dans MSVC?

Pourquoi dois-je mettre 3.14 F au lieu de 3.14 Pour désactiver tous ces avertissements ? Est-il cohérent raison pour raison pour cela ?

8
demandé sur mskfisher 2010-12-04 16:42:32

5 réponses

C'est ce que la norme C++ (et C) a décidé. Les lettres à virgule flottante sont de type double, et si vous avez besoin qu'elles soient des flotteurs, vous les suffixez avec un f . Il ne semble pas y avoir de raison précise quant à la raison, mais je suppose que c'est a) pour la compatibilité avec C, et b) un compromis entre la précision et le stockage.

2.13.3 littérature flottante le type d'un flottant littéral est double à moins que explicitement spécifié par un suffixe. Le les suffixes f et F spécifient float, les suffixes l et L spécifient long double. Si la valeur de l'échelle n'est pas dans le gamme de représentable valeurs pour son type, le programme est mal formé.

17
répondu nos 2010-12-04 14:14:25

C et c++ préfèrent le double pour flotter de plusieurs façons. Comme vous l'avez remarqué, les partitions littérales sont doubles à moins que explicitement fait flottants. En outre, les flotteurs ne peuvent pas être passés en varargs, ils sont toujours promus au double (de la même façon que char et short sont promus en int en varargs).

il est probablement préférable de considérer float comme un contrat double , plutôt que double comme un contrat prolongé float . Qui est, double est le préféré le type à virgule flottante, et float est utilisé chaque fois qu'une version plus petite de double est requise pour un cas particulier. C'est la raison la plus proche que je connaisse d'une raison cohérente, et alors la règle a du sens, même si vous vous trouvez dans le cas où vous avez besoin d'une version plus petite.

5
répondu Steve Jessop 2010-12-04 17:18:52

ce N'est pas Particulier à MSVC, il est exigé par la norme linguistique.

je suggérerais qu'il était logique et non de réduire la précision à moins d'une demande explicite, donc la valeur par défaut est double.

les 6 chiffres significatifs de précision qu'un flotteur de précision simple fournit est rarement suffisant pour un usage général et certainement sur un processeur de bureau moderne serait utilisé comme une optimisation codée à la main où l'écrivain a déterminé qu'elle est suffisante et nécessaire; il est donc logique qu'un marqueur visible explicite soit requis pour spécifier une seule précision littérale.

1
répondu Clifford 2010-12-04 14:25:23

c'est probablement une norme dans le monde C. Le Double est préférable car il est plus précis et vous ne verrez probablement aucune différence de performance. Lire cet article .

0
répondu darioo 2017-05-23 11:51:39

parce que double peut se rapprocher de 3,14 beaucoup mieux que float , peut-être? Voici les valeurs exactes:

3.140000000000000124344978758017532527446746826171875 ( double )

3.1400001049041748046875 ( float )

0
répondu fredoverflow 2010-12-04 17:16:17