我在程序中使用余弦定律,这似乎是我代码的一个慢点。这是我的代码行:
Ans = Math.Sqrt(A ^ 2 + B ^ 2 - 2 * A * B * Math.Cos(C - D))
其中 A 到 D 是每次调用都会改变的双变量。这个函数似乎需要大约 2000 个滴答声才能运行。我已经研究过使用小角度近似值,如果 (CD) 足够小,您可以使用 cos(CD) = 1 - ((CD)^2)/2。不幸的是,这总体上比原始代码慢。我看过任何可以用来简化计算的关系,但是 A 和 C 以复杂的方式相关,B 和 D 以相同的方式相关,A 和 B 之间或 C 和 D 之间没有关系.
我曾考虑对 (CD) 的所有值使用查找函数,但我的准确度目前至少为 6 位有效数字,我更愿意保持在该水平,因为这是我输入数据的准确度,简而言之,这意味着查找中大约有一百万个值,这只是功能的一部分。我考虑过查找所有四个值(A、B、C 和 D),但我不确定如何实现。
我也已经对这个应用程序进行了多线程处理,并尝试使用 GPGPU(由于加载和加载 GPU 内存所花费的时间,GPGPU 最终变慢了)。
所以,我的问题是如何加快这个功能。
先谢谢了!