Weil der (C99 oder C11) Standard so sagt. Siehe answer by 2501.
Es gibt mehrere pragmatische Gründe dafür: Geschichte (erste Implementierungen von C wurden für die Systemprogrammierung verwendet, wo Gleitkommaoperationen keine Rolle spielen), und die Tatsache, dass auf aktuell (Tablet, Desktop, Server ...) Prozessoren, arithmetische Operationen auf double
sind etwa so effizient wie float
(aber einige billige Mikrocontroller haben keine FPU, oder können nur float
per Hardware hinzufügen, und erfordern eine Bibliothek für jede Operation auf double
). Endlich denke ich, dass eine solche Regel etwas einfacher calling conventions und ABI s ermöglicht.
Denken Sie an float
als eine Art-of short double
(was natürlich illegal in C). A float
ist vor allem nützlich, wenn Sie Speicher komprimieren müssen (und den Verlust der Genauigkeit leisten können). Siehe auch http://floating-point-gui.de/ für mehr.
Ja, über die "default argument promotions". –
Ähnlich wird 'char' zu' int' befördert, also 'char c = 127; printf ("% d", c); 'funktioniert auch richtig. –
Würdest du lieber ein Double zu einem Float _demote_? Würden Sie lieber die Komplexität hinzufügen, wenn jeder Typ unabhängig von anderen eng verwandten Typen ist? Die Beförderung von Floats scheint mir die Lösung des gesunden Menschenverstandes zu sein. – abelenky