Vincent通过建议此功能回答了Fast Arc Cos algorithm

float arccos(float x)
{
    x = 1 - (x + 1);
    return pi * x / 2;
}

问题是,为什么是x = 1 - (x + 1)而不是x = -x

最佳答案

仅当(x +1)导致精度损失时,即x大于或小于一个数量级时,它才返回不同的结果。

但是我不认为这是棘手的技巧,而是简单的错误的

cos(0) = 1 but f(1) = -pi/2
cos(pi/2) = 0 but f(0) = 0
cos(pi) = -1 but f(-1) = pi/2

其中f(x)是Vincent的arccos实现。所有这些都由pi/2关闭,线性近似至少可以正确地获得这三个点,否则将是
g(x) = (1 - x) * pi / 2

09-10 05:28
查看更多