Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB.NET: Neperin luku e

tnb [17.10.2004 19:45:22]

#

Jos iskee pakottava tarve laskea Neperin luku itse niin näin se käy. Funktiossa on hyödynnetty Static muuttujia, jotka säilyttävät arvonsa laskentakerrasta toiseen. Siten laskenta tehdään vain ekalla kerralla, muilla kerroilla haetaan vain valmis tulos.

(Helpommin saat luvun tietysti System.Math.e )

Public Shared Function Neper() As Double
    '***********************************************
    '   Luonnollinen luku e  (Neperin luku)
    '
    '   Author: tnb 2004,  vb.net 2003 code
    '***********************************************
    Static Laskettujo As Boolean ' säilyttää arvonsa laskentakerrasta toiseen
    Static ne As Double ' säilyttää arvonsa laskentakerrasta toiseen
    If Laskettujo Then
        Return ne ' oli jo laskettu aiemmin
    End If
    ' eka kerta kun kutsutaan
    Dim k As Integer : Dim n As Long = 1 : ne = 1
    For k = 1 To 20
        n = n * k
        ne = ne + 1.0R / CDbl(n)
    Next
    Laskettujo = True ' lippu päälle että ei tartte laskea toiste
    Return ne
End Function

Blaze [21.10.2004 12:43:06]

#

VB6:lle sovitettaessa joutuu tinkimään hieman tarkkuudesta, kun siinä ei ole tarpeeksi isoja tietotyyppejä :)
VB6:lla n:stä kannattaa tehdä Currency-tyyppinen, jolla päästään 17:sta kierrokseen (vrt. Long, jolla päästään vaan 12:sta).

Pitääkin muuten koittaa sovittaa tämä laskimelle...

Turambar [21.10.2004 17:13:25]

#

Voisit selittää hieman, mitä metodia olet käyttänyt. Itselleni näin pikaisesti katsottuna tuo laskutoimitus on silkkaa hepreaa. Mitä CDb1-funktio tekee?

Todennäköisenä pidän, että olet laskenut e:n näin: kun x -> ääretöntä, niin (1 + 1/x)^x lähestyy e:tä.

Tapoja on myös muita, kuten lukujono a = 1 / n!.

tnb [21.10.2004 19:20:35]

#

CDbl = ConverToDouble

Muunnosket pitää tehdä koska minulla on Option Strict päällä ja herjaisi muuten. 1.0R on ykkönen double tarkkuudella.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta