Хорошо известно, что в C литералы с плавающей запятой (например, 1.23
) имеют тип double
. Как следствие, любой расчет, который их включает, увеличивается до двух.
Я работаю над встроенной системой реального времени, которая имеет модуль с плавающей запятой, который поддерживает только одинарные значения точности (float
). Все мои переменные float
, и этой точности достаточно. Мне не нужно (и не могу позволить себе) double
вообще. Но каждый раз что-то вроде
if (x < 2.5) ...
происходит бедствие: замедление может быть до двух порядков. Конечно, прямой ответ - написать
if (x < 2.5f) ...
но это так легко пропустить (и его трудно обнаружить до слишком позднего времени), особенно когда значение "конфигурации" #define
'd в отдельном файле менее дисциплинированным (или только новым) разработчиком.
Итак, есть ли способ заставить компилятор обрабатывать все (с плавающей запятой) литералы как float, как будто с суффиксом f
? Даже если это противоречит спецификациям, мне все равно. Или любые другие решения? Кстати, компилятор gcc.