Huono otsikko, sen myönnän, mutta tämä on nyt kyllä jokseenkin on kumma juttu.
Kysymys:
Jos DOUBLE-tyyppisen muuttujan a arvo on 0,1 niin mikä on sen muuttujan arvo?
Typerä kysymys, mutta niin on vastauskin. Ja vastauksen saa selvitettyä seuraavalla koodinpätkällä.
DIM a AS DOUBLE CLS a = .1 'a on 0,1 PRINT a 'tulostetaan paljonko a on
Se mitä tuo PRINT tulostaa menee vähän yli hilseen.
mitä se tulostaa?
Mietipä mitä sen pitäisi tulostaa. Pistä tuo koodi sitten QB:hen ja katso mitä se sen sijaan tulostaa.
Tulostaa 0.100000004901161
Tuohan on jo hauskaa...
Hei.. otsikossa kannattaa aina kertoa onko se vb:lle vai qb:lle
Niin kannattaa, pääsi unohtumaan.
Sanokaas miten se voi tulostaa 0.100000004901161 kun sille justiin edellisellä rivillä kerrotaan että se on 0.1?
katos mitä tuo dim a as double tarkoittaa.. voikohan se vaikuttaa kokeile ilman niitä ;)
LOL mitenkäs nyt näin? :DDDDDDDDDDDDDD hyyyyvin toimii :DDDDDDDDDDDDD
mutta kyllä se on .1, pistä vaik "print a = .1" nii se tulostaa -1 elikkä true... print näköjään bugaa? :DDD
Tuo lukuarvo .1 on tulkittu singletyypiksi. Anna arvo risuaidan kera, jos se on QB:ssä kuten VB:ssä. Siis
a = 0.1#
Tai sitten a = 0.1000000000000000000000000000000000
mutta setä miten se sitten eikös single .1 ole todellaki .1? :D
Tuo .1 ei mee binäärisenä koskaan tasan. Siksi tulee pyöristysvirheitä. Singletyypissä on vaan 7 numeroa oikein.
No jätin DIM:n kokonaan pois, silloihan se on single-tyyppinen?
Mutta entäs tämä sitten:
CLS FOR b = 1 TO 8 a = a + .1 NEXT b PRINT a
Ja sooda. Tuo:
PRINT a = .1
Tuonhan pitäisi tulostaa 0, jos väite on epätosi ja -1, jos se on tosi...?
No jos a kerran on 0.1000000004901161 niin miksi hemmetissä se tosiaan tulostaa TRUE?
Koitapa print a = .100000000000000000000000000 sen jälkeen kun olet asettanut a = .1
lainaus:
... No jos a kerran on 0.1000000004901161 niin miksi hemmetissä se tosiaan tulostaa TRUE?
no enpäs tiiä. sitähän mä just ihmettelenkin... :DDDDDD jos toi ei osaa verrata niitä tarpeeksi tarkasti? :DDDDD
Tämä binäärisysteemi menee hienosti yli ymmärryksen. No jotenkin asian kuitenkin tajusin.
Liukulukulaskuissa on aina epätarkkuutta, ja toisinaan tapahtuu tällaisia kummallisia juttuja. Voit tietysti myös käyttää CURRENCY-tietotyyppiä, jossa pyöristysvirheitä ei ole. Tämä siksi, että tieto oikeasti tallennetaan kokonaislukuna. Luvun pituus ja desimaalien määrä on vain rajatumpi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.