User talk:NorwegianBlue/cpp program for calculating d3

Latest comment: 12 years ago by Ovclean

Dear Mr. NorwegianBlue,

The calculation for d3 may be failing due to a small error in the program. By replacing alpha_1 with alpha_n and vice versa in the following line of d3 function, you may get the d3 value for given n up to 1 decimal place only.

    sum += (1 - std::pow(alpha_1,n) - std::pow(1 - alpha_n,n) + std::pow(alpha_1 - alpha_n, n))*dx_1*dx_n

I have written a program in VBA for the calculation of d3 values which gives accuracy up to 5 decimal places. Although the program is divided in three parts but it may be merged together in one single routine. You may translate it to C++. I am posting the code for your reference, hoping that we may work together to further improve the accuracy.

   Function d3Const(ByVal n As Integer) As Double
       Dim result As Double
       Call d3fintegrate(-7, 7, -7, 1000, n, result)
       d3Const = result
  End Function
  Private Sub d3fintegrate(ByVal a As Double, ByVal b As Double, ByVal c As Double, _
                   ByVal subintervals As Integer, n As Integer, result As Double)

       Dim interval1 As Double, interval2 As Double, x As Double, y As Double
       Dim i As Integer, j As Integer
       interval1 = ((b - a) / subintervals)
       result = 0
       i = 1
       Do While (i <= subintervals)
           x = (a + (interval1 * (i - 0.5)))
           interval2 = ((x - c) / subintervals)
           j = 1
           Do While (j <= subintervals)
               y = (c + (interval2 * (j - 0.5)))
               result = result + d3Intfunc(y, x, n) * interval1 * interval2
               j = j + 1
           Loop
           i = i + 1
       Loop
       result = Sqr(2 * result - d2Const(n) ^ 2)
   End Sub
   Private Function d3Intfunc(x As Double, y As Double, n As Integer) As Double
       Dim probx As Double, proby As Double
       probx = Application.NormSDist(x)
       proby = Application.NormSDist(y)
       d3Intfunc = (1 - (proby ^ n) - (1 - probx) ^ n + ((proby - probx) ^ n))
   End Function

Function d3Const is the main program that calls the subroutine "d3fintegrate" which is then used for performing double integration of d3Intfunc. Ovclean (talk) 03:39, 26 January 2012 (UTC)Reply