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 FunctionVB6: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...
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!.
CDbl = ConverToDouble
Muunnosket pitää tehdä koska minulla on Option Strict päällä ja herjaisi muuten. 1.0R on ykkönen double tarkkuudella.
Aihe on jo aika vanha, joten et voi enää vastata siihen.