【发布时间】:2013-05-20 08:45:40
【问题描述】:
我有以下代码行:
SomeDouble= constant1/ ((a * b) * (Math.Asin((c- a) / (a * d)) + constant2))
这两个常数是不同的,是在循环之外计算出来的,a - d是每次都会变化的变量。
从表面上看,它的平均速度相当快 0.002 毫秒(26,508,249 次点击为 47,633.588 秒)。我遇到的问题是它会被调用数十亿次,每次运行软件时都会有大约 200 亿次点击。因此,如果我可以将其减少到 0.001 毫秒,那么差异将是巨大的。我知道除法是一个非常缓慢的过程,我希望计算 arcsin 也很慢。如果有人可以建议是否有更快的计算 arcsin 的方法或任何其他有助于加快这行代码的速度,那就太好了。附带说明一下,关于 vb.net 的内置数学函数是否针对速度进行了优化的任何建议都会很棒我注意到 math.sqrt(somevalue) 比 (somevalue)^0.5 更快。
提前致谢!
【问题讨论】:
-
你需要多少精度?
-
好问题。精度越高越好。话虽这么说,如果有一种方法可以以牺牲准确性为代价提高速度,我绝对希望听到它,以便我可以考虑。我没有专门研究这个变量所需的精度(somedouble)。我在代码的后面确实有一些精度要求,我现在会去看看这里失去精度的代价是什么。
-
计算之间是否有任何变量保持不变?还是以可预测的方式发生变化?
-
很遗憾没有。每个变量与其在任何其他迭代中的对应变量完全无关。
-
a、b、c 和 d 的取值范围是否存在界限?
标签: vb.net math optimization