我的代码主要适用于单精度浮点数。对超越函数的调用经常发生。现在,我正在使用 sin()、cos()、sqrt() 等——接受和返回的函数double
。当它只为 x87 编译时,我知道单精度和双精度之间没有区别。我在 Agner Fog 的优化指南中读到,但是使用 SSE 指令的这些函数的软件版本对于单精度浮点数来说更快。
我的问题是编译器在遇到以下情况时是否会自动使用更快的函数:
float x = 1.23;
float y = sin(x);
还是舍入规则排除了这种优化?
只需进行搜索和替换并查看是否有任何性能提升就很容易了。麻烦的是我还需要指向这些函数的指针。在 MSVC 中,sinf()、cosf() 和友元是内联函数。因此,使用它们需要一些体操。在努力之前,我想知道它是否值得。
除了 MSVC,我还针对 gcc。