Kirjautuminen

Haku

Tehtävät

Koodit: VB.NET: Gammafunktio

Kirjoittaja: tnb

Kirjoitettu: 16.10.2004 – 16.10.2004

Tagit: koodi näytille, vinkki

Vb.net tuo tullessaan tarkemmat (pidemmät) luvut, jolloin vanhojen laskentakaavojen 6-digitin laskentatarkkuus tuntuu turhan heikolta.

Onnistuin parantelemaan Gamma funktion laskentatarkkuutta vastaamaan vb.net:n doublen tarkkuutta.

Koodi käy myös esimerkiksi Rekursion käytöstä ja NaN-arvon palauttamisesta.

( Gamma funktio, kuten yleisesti tiedetään, kulkee kokonaislukujen kertomien (n-1)! kautta )

Public Shared Function Gamma(ByVal x As Double) As Double
        '*********************************************************
        '** Calculation of Gamma function with high accuracy    **
        '** Version 1.0                                         **
        '** Visual Basic.net 2003 code                          **
        '** x can be also negative but not 0, -1,-2...-n        **
        '** original from http://www.rskey.org/gamma.htm        **
        '** improved accuracy by TNB, 2004                      **
        '** key words: statistical, mathematics, algorithm      **
        '*********************************************************

        Dim p1 As Double
        'negative numbers
        If x <= 0 Then
            If x = Int(x) Then
                Return p1.NaN : Exit Function
            End If
            Dim p2 As Double = Math.Sin(Math.PI * (1 - x))
            p1 = Math.PI / p2 / Gamma(1 - x)
            Return p1 : Exit Function
        End If
        'positive
        Dim i As Integer
        Dim xx As Double = x + 40 'the improvement
        p1 = ((xx / Math.E * Math.Sqrt(xx * Math.Sinh(1 / xx) + 1 / (810 * xx ^ 6))) ^ xx) * Math.Sqrt(2 * Math.PI / xx)
        For i = 0 To 39 'the improvement
            p1 = p1 / (x + i)
        Next
        Return p1
    End Function

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta