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