sinf(),cosf()和sin(),cos()之间的任何性能差异

时间:2013-04-23 20:51:12

标签: c compiler-optimization

我的代码主要用于单精度浮点数。对超越函数的调用经常发生。现在,我正在使用sin(),cos(),sqrt()等 - 接受并返回double的函数。当它仅为x87编译时,我知道单精度和双精度之间没有区别。我在Agner Fog的优化指南中读到了这些使用SSE指令的函数的软件版本对于单精度浮点数更快。

我的问题是编译器在遇到类似的东西时是否会自动使用更快的函数:

float x = 1.23;
float y = sin(x);

或者舍入规则是否排除了这样的优化?

只需进行搜索和替换就可以轻松查看是否有任何性能提升。麻烦的是我还需要指向这些功能的指针。在MSVC中,sinf(),cosf()和朋友是内联函数。因此,使用它们需要一些体操。在努力之前,我想知道它是否值得。

除了MSVC,我也瞄准了gcc。

1 个答案:

答案 0 :(得分:3)

在致电sin时,确实没有必要进行演员表演。事实上,如果你使用C99附带的<tgmath.h>标题会适得其反。这为您提供了类型通用宏,它们会根据您的参数选择正确的函数,而不是遗憾地选择目标类型。因此,如果你使用那个标题(不确定这是否适用于MS)

float x = 1.23;
float y = sin(x);

会自动使用sinf