众所周知,在C中,浮点文字(例如1.23
)具有type double
。结果,任何涉及它们的计算都将提高一倍。
我正在一个嵌入式实时系统上工作,该系统的浮点单元仅支持单精度(float
)数字。我所有的变量都是float
,并且这种精度已经足够。我根本不需要(也负担不起)double
。但是每次
if (x < 2.5) ...
写作中,灾难发生了:减速可能高达两个数量级。当然,直接的答案是写
if (x < 2.5f) ...
但这很容易错过(并且很难检测到为时已晚),尤其是当#define
由缺乏纪律(或只是新手)的开发人员在单独的文件中输入“配置”值时。
因此,是否有一种方法可以强制编译器将所有(浮点数)文字视为float,就像带有后缀一样f
?即使违反规范,我也不在乎。或其他解决方案?顺便说一下,编译器是gcc。
-Wdouble-promotion
,至少会给您警告。结合-Wfloat-conversion
应能提供很好的覆盖率。