我有一些主要处理单精度浮点数的代码,经常调用超越函数。目前我使用接受和返回
double
的 sin()、cos()、sqrt() 等函数。当它被编译为 x87 时,我知道单精度和双精度之间没有区别。但是我在 Agner Fog 的优化指南中读到,使用 SSE 指令的软件版本的这些函数对于单精度浮点数更快。
我的问题是,当编译器遇到类似以下内容时,是否会自动使用更快的函数:
float x = 1.23;
float y = sin(x);
或者说舍入规则是否排除了这种优化?
只需要执行搜索和替换就可以轻松查看是否存在性能提升。问题是我还需要指向这些函数的指针。在MSVC中,sinf(),cosf()等都是内联函数。因此,使用它们需要一些技巧。在付出努力之前,我想知道是否值得。
除了MSVC,我还针对gcc进行定位。