Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Miksi laskuvaiheessa tulee overflow? (Vb)

Puhveli [22.05.2005 13:49:59]

#

Ei sillä, ei tämä nyt varsinainen ongelma ole, mutta hassua kylläkin. En tämän paremmin osaa tätä selittää:

Dim foo As Byte
foo = 255 + 255 - 255 'foo = 255 ja toimii
foo = foo + foo - foo 'foo = overflow!?

Onko kellään tietoa VB:n tavasta ratkaista tällaisia yhtälöitä? Mielenkiinnostuneena kysyn vaan että miksi ylempi lasku toimii mutta alempi ei? Koska numerollisestihan molemmat ovat samoja :o

Basikilla en tätä jaksanut kokeilla, mutta kaipa se siinäkin näin pirullismaisesti menee :p

Meitsi [22.05.2005 14:04:08]

#

Kokeilöe tehdä yks lasku kerrallaan.
niinku:

foo=foo+foo
foo=foo-foo

Antti Laaksonen [22.05.2005 14:08:23]

#

Alemmassa laskussa Byte-tyyppisiä muuttujia koetetaan laskea yhteen, mutta välitulos ei mahdu Byte-tyyppiin. Korjaus on muuttaa vaikkapa ensimmäinen muuttuja Int-tyyppiseksi, jolloin VB tajuaa, että laskun keskellä voi esiintyä Byte-tyyppiä suurempia lukuja.

foo = CInt(foo) + foo - foo 'toimii :)

Puhveli [22.05.2005 14:30:21]

#

Elikkä se siis suorittaa laskun kerrallaan, ja tallentaa välituloksen kuvitteelliseen (käsiksipääsemättömään) muuttujaan, jolla on sama datatyyppi kuin laskussa esiintyvällä (tyypin puolesta) suurimmalla muuttujalla? Tämä selittää sen, miksi toisentyyppisten muuttujien laskeminen on nopeampaa kuin kolmansien. Hassua spekulatisoida tällaisilla välillä ;)

Vastaus

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

Tietoa sivustosta