Добре відомо, що в C літерали з плаваючою комою (наприклад 1.23
) мають тип double
. Як наслідок, будь-який розрахунок, який їх включає, підвищується вдвічі.
Я працюю над вбудованою системою реального часу, яка має одиницю з плаваючою комою, яка підтримує лише одиничні float
числа точності ( ). Усі мої змінні є float
, і цієї точності достатньо. Мені взагалі не потрібно (і не по кишені) double
. Але кожного разу щось на кшталт
if (x < 2.5) ...
написано, трапляється катастрофа: уповільнення може становити до двох порядків. Звичайно, пряма відповідь - писати
if (x < 2.5f) ...
але це так легко пропустити (і важко виявити до пізнього часу), особливо коли значення "конфігурації" #define
в окремому файлі належить менш дисциплінованому (або просто новому) розробнику.
Отже, чи є спосіб змусити компілятор обробляти всі літерали (з плаваючою комою) як плаваючі, ніби із суфіксом f
? Навіть якщо це суперечить специфікаціям, мені все одно. Або будь-які інші рішення? До речі, компілятор - gcc.
-Wdouble-promotion
, що принаймні дасть вам попередження. У поєднанні з-Wfloat-conversion
має дати досить хороше покриття.