【发布时间】:2011-03-23 18:40:11
【问题描述】:
我有自己的,非常快的 cos 函数:
float sine(float x)
{
const float B = 4/pi;
const float C = -4/(pi*pi);
float y = B * x + C * x * abs(x);
// const float Q = 0.775;
const float P = 0.225;
y = P * (y * abs(y) - y) + y; // Q * y + P * y * abs(y)
return y;
}
float cosine(float x)
{
return sine(x + (pi / 2));
}
但是现在当我分析时,我看到 acos() 正在杀死处理器。我不需要非常精确的。什么是计算acos(x)的快速方法 谢谢。
【问题讨论】:
-
您非常快速的函数在 [-pi,pi] 中的平均误差为 16%,并且在该区间之外完全无法使用。在我的系统上,来自
math.h的标准sinf只需要大约2.5 倍的时间。考虑到您的函数是内联的而 lib 调用不是,这实际上并没有太大区别。我的猜测是,如果您添加了范围缩减,因此它可以以与标准功能相同的方式使用,您将拥有完全相同的速度。 -
否,最大误差为 0.001 (1/10th %)。您是否忘记应用更正? (y = P * bla...) 看原文和讨论:devmaster.net/forums/topic/4648-fast-and-accurate-sinecosine 其次,sin 和 cos 以 +-pi 为界是非常常见的情况,尤其是在图形和模拟中,这两者都经常需要一个快速的近似 sin/cos。
-
这是一个非常有趣的问题,感谢您的提问!
标签: c++ c algorithm math performance