我需要一个算法/近似来计算缩放互补误差函数,erfcx(x)来双浮点精度。
我在工作PC上,所以我只能使用Excel和VBA,我不能使用外部库或加载项:我需要自己编写代码。
Excel仅提供erf()和erfc()函数。
关系erfcx(x)= exp(x ^ 2)erfc(x)显然是有用的,但是对于大于26.5的x有算术上/下流,我需要大于此。
下面的帖子讨论了一个python实现 - 但似乎并没有解决我能说的问题。它提供了使用其他库的解决方案或者不够精确的近似值来满足我的需求。
Is there a scaled complementary error function in python available?
有什么建议吗?
更新
我使用了我在维基百科上找到的Continued Fraction表示 以及用于解决此处http://finance4traders.blogspot.nl/2009/07/continued-fractions-and-modified-lentzs.html
中连续分数的算法的修改版本以下代码似乎有效,实际上对较大的输入参数的迭代次数较少。
Function erfcx(x) As Variant
Dim Ai As Double
Dim Bi As Double
Dim Ci As Double
Dim Di As Double
Dim Ei As Double
Dim Fi As Double
Dim X2 As Double
Dim i As Long
Const SQRPI As Double = 1.7724538509055
Const MAX_ITERATIONS = 1000
If x < 26.5 Then
erfcx = Application.WorksheetFunction.ErfC_Precise(x) * Exp(x ^ 2)
Else
X2 = x ^ 2
Bi = X2
Fi = X2
Ci = X2
Di = 0
Do
i = i + 1
Ai = i / 2
If i Mod 2 = 0 Then
Bi = X2
Else
Bi = 1
End If
Di = 1 / (Bi + Ai * Di)
Ci = Bi + Ai / Ci
Ei = Ci * Di
Fi = Fi * Ei
Loop While Ei <> 1 And i < MAX_ITERATIONS
Debug.Print i
erfcx = x / Fi / SQRPI
End If End function