三角函数

时间:2010-09-24 09:06:26

标签: c++ performance geometry

我想犯罪。所以这是我的代码:

inline double _cdecl Sin(double Rad)
{
    _asm
    {
        fld QWORD PTR [Rad]
        fsin 
    }
}

我的功能比标准罪更快(比例约为6)。 (可能存在一些问题,但这对我来说已经足够了) 但如果我这样做的话

for(int i = 0; i < 1000000; ++i)
       sin(1)

标准罪将以约3的比率更快 如果我愿意的话

for(int i = 0; i < 1000000; ++i)
       sin(i)

我的func比率约为3。 这里发生了什么?

2 个答案:

答案 0 :(得分:3)

编译器可能知道sin(1)是一个没有副作用的内在纯函数,因此甚至不会在循环中调用它。所以你可能最终只是为循环本身计时。使用适当的编译器开关检查生成的汇编代码以进行汇编输出。

答案 1 :(得分:0)

编译器不会更好地优化标准sin的第一个版本并检测它是一个常量吗?