我的代码主要用于单精度浮点数。对超越函数的调用经常发生。现在,我正在使用sin(),cos(),sqrt()等 - 接受并返回double
的函数。当它仅为x87编译时,我知道单精度和双精度之间没有区别。我在Agner Fog的优化指南中读到了这些使用SSE指令的函数的软件版本对于单精度浮点数更快。
我的问题是编译器在遇到类似的东西时是否会自动使用更快的函数:
float x = 1.23;
float y = sin(x);
或者舍入规则是否排除了这样的优化?
只需进行搜索和替换就可以轻松查看是否有任何性能提升。麻烦的是我还需要指向这些功能的指针。在MSVC中,sinf(),cosf()和朋友是内联函数。因此,使用它们需要一些体操。在努力之前,我想知道它是否值得。
除了MSVC,我也瞄准了gcc。
答案 0 :(得分:3)
在致电sin
时,确实没有必要进行演员表演。事实上,如果你使用C99附带的<tgmath.h>
标题会适得其反。这为您提供了类型通用宏,它们会根据您的参数选择正确的函数,而不是遗憾地选择目标类型。因此,如果你使用那个标题(不确定这是否适用于MS)
float x = 1.23;
float y = sin(x);
会自动使用sinf
。