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
Liukulukujen kanssa laskujen järjestyksellä voi olla vaikutusta tulokseen. Samat pyöristysvirheet ovat kaikkien ohjelmointikielten vaiva.
Aihe on jo aika vanha, joten et voi enää vastata siihen.