Es ist bekannt, dass in C Gleitkomma-Literale (z . B. 1.23
) einen Typ haben double
. Infolgedessen wird jede Berechnung, die sie betrifft, auf das Doppelte hochgestuft.
Ich arbeite an einem eingebetteten Echtzeitsystem mit einer Gleitkommaeinheit, die nur float
Zahlen mit einfacher Genauigkeit ( ) unterstützt. Alle meine Variablen sind float
, und diese Genauigkeit ist ausreichend. Ich brauche (und kann es mir überhaupt nicht leisten) double
. Aber jedes Mal so etwas
if (x < 2.5) ...
geschrieben ist, passiert eine Katastrophe: Die Verlangsamung kann bis zu zwei Größenordnungen betragen. Die direkte Antwort ist natürlich zu schreiben
if (x < 2.5f) ...
Dies ist jedoch so leicht zu übersehen (und bis zu spät schwer zu erkennen), insbesondere wenn ein ' #define
disziplinierter ' Wert von einem weniger disziplinierten (oder nur neuen) Entwickler in einer separaten Datei gespeichert wird.
Gibt es also eine Möglichkeit, den Compiler zu zwingen, alle (Gleitkomma-) Literale wie mit einem Suffix als float zu behandeln f
? Auch wenn es gegen die Spezifikationen ist, ist es mir egal. Oder irgendwelche anderen Lösungen? Der Compiler ist übrigens gcc.
-Wdouble-promotion
, die Ihnen zumindest Warnungen geben werden. Kombiniert mit-Wfloat-conversion
sollte eine ziemlich gute Abdeckung ergeben.