Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: vb6 matemaattiset funktiot

Sinis [06.06.2006 10:23:00]

#

Eli löytyykö jostain VB6:een matemaattisia funktioita valmiina?

BadSource [06.06.2006 10:26:58]

#

Katso tuolta.

Edit: Listasta näköjään puuttuvat seuraavat funktiot Tan, Sin, Exp, Cos, Atn ja Log

Sinis [06.06.2006 10:35:53]

#

Noi löysin jo. Tarvitsisin pääasiassa tilastomatematiikan funktioita esim. Poisson ja kertoma yms.

Antti Laaksonen [06.06.2006 12:20:31]

#

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 Function

Merri [06.06.2006 16:15:28]

#

Kertomaa 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 Sub

Ohjelman 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 Sub

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

Vastaus

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

Tietoa sivustosta