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
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...
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.