Das hat der C ++ (und C) Standard entschieden. Fließkommaliterale sind vom Typ double, und wenn Sie sie als Floats benötigen, suffi- zieren Sie sie mit einem f
. Es scheint keinen genau angegebenen Grund dafür zu geben, aber ich denke, es ist a) Aus Kompatibilitätsgründen zu C und b) Ein Kompromiss zwischen Präzision und Speicher.
2.13.3 Fließende Literale Der Typ eines floating literal ist doppelt, es sei denn explizit durch ein Suffix angegeben. Das Suffixe f und F spezifizieren float, die Suffixe l und L spezifizieren long double. Wenn der skalierte Wert nicht in der Bereich von darstellbare Werte für seinen Typ, das Programm ist schlecht gebildet.
C und C ++ bevorzugen Double, um auf verschiedene Arten zu floaten. Wie Sie bemerkt haben, sind Bruchliterale doppelt vorhanden, es sei denn, es wurden explizit Floats erstellt. Floats können auch nicht in varargs übergeben werden, sie werden immer zu double hochgestuft (in gleicher Weise werden char und short in varargs zu int hochgestuft).
Es ist wahrscheinlich besser, sich float
als eine vertraglich vereinbarte double
vorzustellen, anstatt als double
eine erweiterte float
. Das heißt, double
ist der bevorzugte Gleitkommatyp, und float
wird verwendet, wenn für einen bestimmten Fall eine kleinere Version von double
erforderlich ist. Das ist der nächstliegende, den ich aus einem zusammenhängenden Grund kenne, und dann macht die Regel Sinn, selbst wenn Sie gerade in dem Fall sind, in dem Sie eine kleinere Version benötigen.
Dies ist nicht MSVC eigen, es wird vom Sprachstandard verlangt.
Ich würde vorschlagen, dass es nicht sinnvoll ist, die Genauigkeit zu reduzieren, es sei denn, dies wird ausdrücklich angefordert, so dass der Standardwert doppelt ist.
Die sechs signifikanten Stellen der Genauigkeit, die ein Float mit einfacher Genauigkeit liefert, reichen selten für den allgemeinen Gebrauch aus, und sicherlich würde ein moderner Desktop-Prozessor als handcodierte Optimierung verwendet werden, wo der Schreiber festgestellt hat, dass sie ausreichend und notwendig ist; Daher ist es sinnvoll, dass ein expliziter sichtbarer Marker erforderlich ist, um ein Literal mit einfacher Genauigkeit anzugeben.
Dies ist wahrscheinlich ein Standard in der C-Welt. Double wird bevorzugt, da es genauer ist und Sie wahrscheinlich keine Leistungsunterschiede sehen werden. Lesen Sie diesen Beitrag .
Weil double
3.14 viel besser als float
ist, vielleicht? Hier sind die genauen Werte:
3.140000000000000124344978758017532527446746826171875 ( double
)
3.1400001049041748046875 ( float
)
Tags und Links c++ visual-c++ floating-point double