Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB, VB6: Typerä kysymys, mutta niin on vastauskin

Sivun loppuun

hunajavohveli [15.02.2004 19:50:00]

#

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.

makeuu [15.02.2004 19:51:15]

#

mitä se tulostaa?

hunajavohveli [15.02.2004 19:52:51]

#

Mietipä mitä sen pitäisi tulostaa. Pistä tuo koodi sitten QB:hen ja katso mitä se sen sijaan tulostaa.

sqwiik [15.02.2004 19:55:06]

#

Tulostaa 0.100000004901161
Tuohan on jo hauskaa...

makeuu [15.02.2004 19:56:21]

#

Hei.. otsikossa kannattaa aina kertoa onko se vb:lle vai qb:lle

hunajavohveli [15.02.2004 19:57:32]

#

Niin kannattaa, pääsi unohtumaan.

Sanokaas miten se voi tulostaa 0.100000004901161 kun sille justiin edellisellä rivillä kerrotaan että se on 0.1?

makeuu [15.02.2004 19:59:43]

#

katos mitä tuo dim a as double tarkoittaa.. voikohan se vaikuttaa kokeile ilman niitä ;)

sooda [15.02.2004 20:00:20]

#

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

setä [15.02.2004 20:00:48]

#

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

sooda [15.02.2004 20:03:42]

#

mutta setä miten se sitten eikös single .1 ole todellaki .1? :D

setä [15.02.2004 20:05:41]

#

Tuo .1 ei mee binäärisenä koskaan tasan. Siksi tulee pyöristysvirheitä. Singletyypissä on vaan 7 numeroa oikein.

hunajavohveli [15.02.2004 20:09:13]

#

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?

setä [15.02.2004 20:13:19]

#

Koitapa print a = .100000000000000000000000000 sen jälkeen kun olet asettanut a = .1

sooda [15.02.2004 20:14:03]

#

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

hunajavohveli [15.02.2004 20:17:15]

#

Tämä binäärisysteemi menee hienosti yli ymmärryksen. No jotenkin asian kuitenkin tajusin.

Antti Laaksonen [15.02.2004 23:56:08]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta