缩放互补错误函数,erfcx(x),避免算术溢出的计算 – VBA / Excel

我需要一个algorithm/近似来计算比例互补误差函数erfcx(x)来双精度浮点数。

我在工作电脑上,所以我只能使用Excel和VBA,而且我不能使用外部库或外接程序:我需要自己编写代码。

Excel只提供erf()和erfc()函数。

关系erfcx(x)= exp(x ^ 2)erfc(x)显然是有用的,但是对于大于26.5的x有算术上/下溢,我需要大于这个。

下面的post讨论了一个python实现 – 但它似乎不能解决这个问题,我可以告诉。 它提供的解决scheme使用其他库或近似值,不足以满足我的需求。

python中是否有缩放互补错误函数?

有什么build议么?

更新:

我使用维基百科上发现的这个Continued Fraction表示
和一个修改版本的algorithm来解决连续分数在这里findhttp://finance4traders.blogspot.nl/2009/07/continued-fractions-and-modified-lentzs.html

下面的代码似乎工作,实际上较大的input参数需要更less的迭代。

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 

这里讨论几个近似值:

AMS杂志文章

一旦你确定了哪个近似是合适的,我们可以帮助你在工作表函数或VBA UDF()