Rakennan rahoitusalan sovellusta VB:llä Excelin päälle. Aloittelevana ohjelmoijana en löydä millään tekemääni virhettä ohjelman seuraavasta osiosta (tässä mielestäni olennaiset osat koodista (aliohjelmassa on aiemmin laskettu arvot mainituille muuttujille ja vieläpä onnistuneesti):
***
Dim vola as Double, sqrdeltasumma as Double, T as Double
Dim deltasumma as Double
'...
vola = Sqr((1 / 249 * sqrdeltasumma - (1 / (250 * 249)) * deltasumma ^ 2) / Sqr(T)) * Sqr(250)
***
Eli,
((Sqr(1 / 249 * sqrdeltasumma - (1 / (250 * 249)) * deltasumma ^ 2))
on varianssin kaava joka sitten annualisoidaan vuosivolatiliteetiksi.
Ongelma on, että VB antaa Errorin 6 (overflow); viitannee siihen ettei laskun tulos istu muuttujaan vola. Kuitenkin kaikki muuttujat on tyyppiä Double ja sinänsä yksinkertainen lasku onnistuu jopa Casion taskulaskimella. Miksi VB ei tätä osaa vai minäkö en vaan osaa?
Virhe OverFlow tulee yleensä kun luvut kasvavat hirveän isoiksi.
Esim jos muuttujassa jonka tyyppi on integer olevan arvo
kasvaa yli tietyn pisteen (jotain 60000 ja risat) niin silloin saa tuon virheilmoituksen.
Kannattaa tutkia missä kohtaa tarkalleen(rivi) virhe tulee ja ihmetellä sitä sitten.
Taskulaskimella (heh) knäppäiltyäni sain volan arvoksi (eräässä tapauksessa) n. 0,43665 joten pitäisi doubleen mahtua.
Ja virhe tulee juuri tuolla rivillä ("vola = ...). Sqrdeltasumma, deltasumma ja T lasku vielä onnistuu.
Miten ison vastauksen tuo laskin antaa?
Doubleen pitäisi kyllä kaikki luvut mennä.
Vika saattaisi olla siinä, että annat sqr funktiolle liian suuren luvun ratkottavaksi(en kyllä usko).
Voisitko antaa joitakin esimerkkejä sqrdeltasumman, deltasumman ja T:n arvoista?
Vika lienee siinä, että VB kuvittelee lukujen 249 ja 250 olevan Integer-tyyppisiä, 249 * 250 sitten menee arvoalueen yli. Muuta luvut 249 ja 250 muotoon 249# ja 250# (#-pääte tarkoittaa Double-tyyppiä), niin laskun pitäisi onnistua.
Noniin. 249# ja 250# ratkaisi ongelman. Olisi pitänyt ilmeisesti alunperinkin määritellä tuo 250 vakioksi (tyypiltään Double vieläpä)(kaupankäyntipäivien lukumäärä kun ei muutu) eikä laittaa lukua suoraan kaavaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.