Печать числа с плавающей запятой в C, избегая при этом повышения параметров с переменным числом аргументов до удвоения

Как я могу печатать (то есть to stdout) float в C без , чтобы он был повышен до double при передаче в printf?

Проблема здесь в том, что вариативные функции в C преобразовать все параметры float в double , что влечет за собой два ненужных преобразования. Например, если вы включите -Wdouble-promotion в GCC и скомпилируете

float f = 0.f;
printf("%f", f);

, вы получите

warning: implicit conversion from 'float' to 'double' when passing argument to function

У меня относительно небольшая вычислительная мощность (процессор ARM Cortex-M3 с частотой 72 МГц), и я я определенно узкое место в ASCII выводе данных с плавающей запятой. Поскольку в архитектуре изначально отсутствует аппаратный FPU, необходимость преобразования между одинарной и двойной точностью не помогает.

Есть ли способ более эффективно печатать число с плавающей запятой на прямом C?

8
задан Xo Wang 2 April 2011 в 08:15
поделиться