【发布时间】:2011-11-23 18:38:06
【问题描述】:
将s 作为某个(未知)角“a”的正弦,获得“a 的余弦”的最快方法是什么?
我知道两种显而易见的方式:
c = cos(asin(s));
和
c = sqrt(1 - s*s);
但是我不知道函数 cos()、asin() 和 sqrt() 的实现在速度方面如何相互比较。一个比另一个快多少?它们在现代处理器中的实现之间是否存在显着差异,例如,在 x86-64 和带有 VFP 的 ARM 之间?最后,有什么更好的解决方案?
编辑:由于现在已经有 3 个不相关的答案,让我澄清一下:我最初没有角度,我只有正弦。所以没有必要告诉我将角度旋转 90 度,这样我就可以从其他函数中获得相同的值...
【问题讨论】:
-
你熟悉Premature Optimization这个概念吗?
-
测量一下你就知道了。但要注意溢出。
-
将此问题的范围缩小到特定的编程语言可能会有所帮助。
-
您的精度要求是什么?你可以近似你的函数。
标签: c++ floating-point trigonometry