Eli löytyykö jostain VB6:een matemaattisia funktioita valmiina?
Katso tuolta.
Edit: Listasta näköjään puuttuvat seuraavat funktiot Tan, Sin, Exp, Cos, Atn ja Log
Noi löysin jo. Tarvitsisin pääasiassa tilastomatematiikan funktioita esim. Poisson ja kertoma yms.
Jos jotain funktiota ei ole valmiiksi, niin se täytyy tehdä itse. Esim. kertoma:
Function kertoma(luku As Long) As Long
Dim i As Long
kertoma = 1
For i = 2 To luku
kertoma = kertoma * i
Next
End FunctionKertomaa varten kannattaa tehdä valmis taulukko. Paljon nopeampaa kuin kutsua funktiota, joka kaiken lisäksi tekee matikkaa (pelkästään funktion kutsuminen on monta kertaa hitaampaa kuin suora muuttujan käyttö).
' moduuliin
Option Explicit
Public Kertoma(17) As Currency
Public Sub InitKertoma()
Dim lngA As Long
Kertoma(1) = 1
For lngA = 2 To 17
Kertoma(lngA) = Kertoma(lngA - 1) * lngA
Next lngA
End SubOhjelman alussa siis tehdään InitKertoma ja sen jälkeen voi käyttää Kertomaa. Valitsin Currencyn, koska se sallii välit 1 - 17 sortumatta luvun pyöristämiseen (liukulukujen eli Singlen ja Doublen heikkous). Long kestää vain 12 eri tasoa.
Sitten löytyy tietysti 64-bittinen Decimal, joka kestää kertomaa ihan 27:ään asti. Valitettavasti sitä voi käyttää vain Variantin kautta. Jos kuitenkin jostain syystä on tarve niin järkyttävän isoille luvuille, niin:
Option Explicit
Public Kertoma(27) As Variant
Public Sub InitKertoma()
Dim lngA As Long
Kertoma(1) = CDec(1)
For lngA = 2 To 27
Kertoma(lngA) = Kertoma(lngA - 1) * CDec(lngA)
Next lngA
End SubTuon kokoisten lukujen kanssa alkaakin tulla jo rohveessorillakin housuun. Kertoma(27) = 10 888 869 450 418 352 160 768 000 000
Muoksis!
Tein testailuja, ja Double menee epätarkaksi 21:n kohdalla, vaikka se periaatteessa kestäisikin suuremman luvun kuin Decimal.
Aihe on jo aika vanha, joten et voi enää vastata siihen.