【发布时间】:2016-12-01 18:16:28
【问题描述】:
我需要在我的项目中多次计算 ASin。在 C# 中,它需要很多时间。
我使用系统命名空间中的 Math.Asin()
问题是有什么方法可以在 C# 中更快地实现 Asin 函数。
任何近似算法或其他可以更快工作的实现?
【问题讨论】:
-
如果一个近似答案对您来说足够好,那么您应该考虑预先计算一个查找表。您可以根据需要使用尽可能多的条目以获得所需的准确性。
-
我不能使用太多额外的内存,但仍然需要一个很好的近似值。所以预先计算对我不起作用。
-
如果没有其他方法可以实现 asin ,那么我需要逼近函数,但还是找不到合适的
-
真的是
asin是瓶颈,还是因为不断的范围检查而需要安全 C# 代码变慢的数组?将代码中慢的部分标记为unsafe以避免范围检查是否有帮助? --asin(x)本质上是atan2(x,sqrt(1-x*x)),其中atan2和sqrt通常由FPU 处理,必须非常小心地选择替代方案,因为它们很容易超过操作数。 -
你真的分析过你的代码吗?