c++ - 棘手的算术或手法?

标签 c++ c math

文森特回答了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 比 1 大或小很多个数量级。

但我不认为这是诡计花招,我认为这很明显错误

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

关于c++ - 棘手的算术或手法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380827/

相关文章:

string - 将字符串转换为算术运算符

c++ - 数字的立方根,C++

c++ - 在 C++ 中执行从父目录打开父目录中的文件的程序

c++ - SteamVR 覆盖 Controller 输入?

c++ - 是否可以防止遗漏聚合初始化成员?

c - 设计一个函数,使其在 C 中没有全局变量

c - 在没有适当原型(prototype)的情况下调用 printf 会调用未定义的行为吗?

转换单个字符,以便可以在需要 char * 的地方使用

c++ - 如何在 C++ 中获取服务显示名称?

algorithm - R 结构中的节数