Il est bien connu qu'en C, les littéraux en virgule flottante (par ex. 1.23
) ont le type double
. En conséquence, tout calcul qui les implique est promu au double.
Je travaille sur un système temps réel embarqué qui possède une unité à virgule flottante qui ne supporte qu'une seule précision ( float
). Toutes mes variables sont float
et cette précision est suffisante. Je n'ai pas besoin (ni ne peux me permettre) double
du tout. Mais à chaque fois que quelque chose comme
if (x < 2.5) ...
est écrit, un désastre se produit : le ralentissement peut atteindre deux ordres de grandeur. Bien sûr, la réponse directe est d'écrire
if (x < 2.5f) ...
mais c'est tellement facile à manquer (et difficile à détecter jusqu'à ce qu'il soit trop tard), surtout lorsqu'une valeur de "configuration" est #define
dans un fichier séparé par un développeur moins discipliné (ou juste nouveau).
Existe-t-il un moyen de forcer le compilateur à traiter tous les littéraux (à virgule flottante) comme des flottants, comme s'ils avaient le suffixe f
? Même si c'est contre les spécifications, je m'en fiche. Ou d'autres solutions ? Le compilateur est gcc, d'ailleurs.