Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sinf()、cosf()和sin()、cos()之间的性能差异_C_Compiler Optimization - Fatal编程技术网

sinf()、cosf()和sin()、cos()之间的性能差异

sinf()、cosf()和sin()、cos()之间的性能差异,c,compiler-optimization,C,Compiler Optimization,我的代码主要用于单精度浮点数。对超越函数的调用相当频繁。现在,我正在使用sin()、cos()、sqrt()等函数——这些函数接受并返回double。当它仅为x87编译时,我知道单精度和双精度之间没有区别。然而,我在Agner Fog的优化指南中读到,使用SSE指令的这些函数的软件版本对于单精度浮点数来说速度更快 我的问题是编译器在遇到以下情况时是否会自动使用更快的函数: float x = 1.23; float y = sin(x); 还是舍入规则排除了这种优化 只需进行搜索和替换,看看是

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

我的问题是编译器在遇到以下情况时是否会自动使用更快的函数:

float x = 1.23;
float y = sin(x);
还是舍入规则排除了这种优化

只需进行搜索和替换,看看是否有任何性能提升,就足够简单了。问题是我还需要指向这些函数的指针。在MSVC中,sinf()、cosf()和friends是内联函数。因此,使用它们需要一些体操。在做出努力之前,我想知道这是否值得


除了MSVC,我还瞄准了gcc。

在调用
sin
时,真的不需要演员阵容。事实上,如果您使用C99附带的
头,则会适得其反。这将为您提供类型泛型宏,这些宏将根据您的参数选择正确的函数,而不是目标类型。因此,如果您使用该标题(不确定这是否适用于MS)


将自动在引擎盖下使用
sinf

您确定对这些函数的调用确实会减慢速度,值得浪费时间考虑吗?你分析过你的代码了吗?你是对的。通过强制转换,编译器会认为输入实际上是一个双精度的。我把它从问题中去掉了。
float x = 1.23;
float y = sin(x);