哪位给个sin/cos的优化版?(C/C++)

fallening fallening 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
程序中调用了20亿次的样子,要将近80多秒(1.3G cpu)的运行时间
哪位收藏有更好的?
偶运行的程序大致如下(实际使用的修修补补过,不过并没有很大的变化,也就是少做一两次乘法的样子)
如果哪位有基于查表法之类的,请不要吝啬



/*
* cosine_sine.cpp
*
* Created on: 2009-8-28
* Author: Administrator
*/

//1.27323954 = 4/pi
//0.405284735 =-4/(pi^2)


/*********************************************************
* high precision sine/cosine
*********************************************************/
double shift(const double x) {
//always wrap input angle to -PI..PI
while (x < -3.14159265)
x += 6.28318531;
while (x > 3.14159265)
x -= 6.28318531;
return x;
}

double sine(const double x) {
double sin = 0;
x = shift( x );
//compute sine
if (x < 0) {
sin = 1.27323954 * x + .405284735 * x * x;

if (sin < 0)
sin = .225 * (sin * -sin - sin) + sin;
else
sin = .225 * (sin * sin - sin) + sin;
} else {
sin = 1.27323954 * x - 0.405284735 * x * x;

if (sin < 0)
sin = .225 * (sin * -sin - sin) + sin;
else
sin = .225 * (sin * sin - sin) + sin;
}
return sin;
}

double cosine(const double x) {
double cos = 0;
//compute cosine: sin(x + PI/2) = cos(x)
x += 1.57079632;
if (x > 3.14159265)
x -= 6.28318531;

if (x < 0) {
cos = 1.27323954 * x + 0.405284735 * x * x;

if (cos < 0)
cos = .225 * (cos *-cos - cos) + cos;
else
cos = .225 * (cos * cos - cos) + cos;
}
else
{
cos = 1.27323954 * x - 0.405284735 * x * x;

if (cos < 0)
cos = .225 * (cos *-cos - cos) + cos;
else
cos = .225 * (cos * cos - cos) + cos;
}
return cos;
}
...全文

相关推荐

评论 76
收藏 已收藏
分享
返回顶部
fallening
数据结构与算法 33,027 成员 35,334 内容