Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA, desimaalivirhe

johan123 [26.11.2006 15:52:32]

#

Koitan laskea varianssia viivellä, alla on toimiva tapa laskea se (joka toivonmukaan on oiken). Ongelma on että Excel kadottaa decimaaleja liian paljon tuossa koodipätkässä. Vastauksena tulee 63.01733699 kun se tulisi olla 63.03047106 (mathlabin mukaan). Pieni ero mutta kun lasketaan variansi ratioota niin tuomonen ero on täysin hyväksymätön. Onko mitään neuvoja (muuta kun että vaihda kieli)?

Public Function CalculateVariance(q As Integer, lnPrices As Range)
    'q on viive

    Dim k As Integer
    Dim var As Double
    Dim u As Double
    Dim n As Integer
    Dim m As Double

    n = lnPrices.Count
    k = 1 + q
    u = getMean(lnPrices)

    Do While (k <= n)
        var = var + (lnPrices.Cells(k) - lnPrices.Cells(k - q) - q * u) ^ 2
        k = k + 1
    Loop

    m = q * (n - q + 1) * (1 - q / n)
    var = (1 / m) * var
    CalculateVariance = var
End Function

Private Function getMean(prices As Range) As Double
    Dim n As Integer
    Dim i As Integer
    Dim mean As Double
    i = 1
    n = prices.Count

    Do While (i <= n)
        mean = mean + prices.Cells(i)
        i = i + 1
    Loop
    mean = mean / n

    getMean = mean
End Function

Antti Laaksonen [01.12.2006 18:57:17]

#

Liukulukujen kanssa laskujen järjestyksellä voi olla vaikutusta tulokseen. Samat pyöristysvirheet ovat kaikkien ohjelmointikielten vaiva.

Vastaus

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

Tietoa sivustosta