我正在用C++写一些数字代码,我希望能够在使用double和float之间进行交换。因此,我添加了一个#define MYFLT,可以根据需要将其设置为浮点数或 double 数。但是,我该如何处理各种数字文字。
例如

MYFLT someNumber = 1.2;
MYFLT someOtherNumber = 1.5f;

当MYFLT为浮点型时为第一行给出编译器警告,而当MYFLT为 double 时为第二行给出编译器警告。我知道这是一个简单的示例,但是在其他情况下,如果我使用字面量较长的表达式,并且浮点数最终可能会转换为double值,然后返回到float数,那么我认为这会花费我很多性能。我该如何处理?

我可以做类似的事情
MYFLT someNumber = MYFLT(1.2);
MYFLT someOtherNumber = MYFLT(1.5);

但这很繁琐。我假设这样做是因为编译器足够聪明,可以在需要时仅使用浮点数(有人可以确认吗?)。如果有一个MSVC++编译器开关或#define告诉编译器将所有浮点文字视为浮点而不是 double ,那会更好。是否存在这样的开关?

即使当我用上面的文字包装所有文字时,使用float而不是double时,我的代码运行速度也会降低50%。我期望通过simd类型的操作来提高性能,而不是罚款!

菲尔

最佳答案

您想要的是#define MYFLTCONST(x) x##f还是#define MYFLTCONST(x) x,具体取决于您是否要附加ffloat后缀。

关于c++ - 将所有浮点文字设置为浮点MSVC++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29940273/

10-11 23:21
查看更多