gpt4 book ai didi

vb.net - 优化除法/指数计算

转载 作者:行者123 更新时间:2023-12-03 17:36:57 25 4
gpt4 key购买 nike

我继承了一个Visual Studio / VB.Net数值模拟项目,该项目的计算效率可能很低。分析表明该函数被称为很多(超过一百万次),并且在该函数内花费了整个计算的大约50%。这是有问题的部分

结果=(A *(E ^ C))/(D ^ C * B)(其中A-C是局部双变量,D&E全局双变量)

然后将结果与可能还会有其他改进的阈值进行比较,但我将改天

任何想法或帮助将不胜感激

史蒂夫

最佳答案

指数运算符(Math.Pow)不太快,没有专用的CPU指令来计算它。您提到D和E是全局变量。如果您可以隔离它们的更改,那将为您带来更快的希望。使用对数重写方程式:

log(r) = log((a x e^c) / (b x d^c))
= log(a x e^c) - log (b x d^c)
= log(a) + log(e^c) - log(b) - log(d^c)
= log(a) + c*log(e) - log(b) - c*log(d)
= log(a) - log(b) + c x (log(e) - log(d))
result = exp(r)


提供此功能来计算结果:

  Function calculate(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double, ByVal e As Double) As Double
Dim logRes = Math.Log(a) - Math.Log(b) + c * (Math.Log(e) - Math.Log(d))
Return Math.Exp(logRes)
End Function


我用StopWatch类给它计时,它和您的原始表达速度一样快。当然不是巧合。通过某种方式可以预先计算Math.Log(e)-Math.Log(d)项,您将获得成功。

关于vb.net - 优化除法/指数计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com