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