Avatar billede f2 Nybegynder
26. februar 2003 - 14:54 Der er 13 kommentarer og
2 løsninger

Int((2.1 - 1) * 10) = 1 ?

Int((2.1 - 1) * 10) giver 1!
..men ((2.1 - 1) * 10 = 2 ....
Hvis man fx laver 2.1 om til single, så virker det faktisk.
Men, hvis det er double, så virker det ikke..
Nogen der har en forklaring (løsning!)?
Avatar billede ocp Nybegynder
26. februar 2003 - 15:01 #1
Det giver altså 11 hos mig.
Avatar billede ocp Nybegynder
26. februar 2003 - 15:02 #2
Begge statements giver 11.
Avatar billede f2 Nybegynder
26. februar 2003 - 15:03 #3
Int((CDbl(1.2) - 1) * 10)
Int((1.2 - 1) * 10)

Sorry. :)
Avatar billede erikjacobsen Ekspert
26. februar 2003 - 15:06 #4
Der står nok (1.19999999-1)*10 = 0.1999999999*10 = 1.9999999999999
som med en Int giver 1. Måske du skulle afrunde.
Avatar billede the_collector Novice
26. februar 2003 - 15:09 #5
Det drejer sig givetvis om afrunding. Så resultatet af (1.2-1)*10 er 1.9999999. Når du tager en int, så giver den 1 i stedet for 2. Hvis nu resultatet havde været 2.0000000001, så ville den give 2.
Avatar billede ocp Nybegynder
26. februar 2003 - 15:10 #6
F2: Begge statements giver nu 1 ;-)
Avatar billede the_collector Novice
26. februar 2003 - 15:11 #7
Man kunne i gamle dage lave tilsvarende beregninger på TI lommeregnere. Der kunne man lave regnestykker som viste at 1=0 f.eks.
Avatar billede f2 Nybegynder
26. februar 2003 - 15:12 #8
collector: Også det jeg tænkte.
Giver bare ikke mening at 1.2 er 1.199999999999999 ?
Avatar billede arne_v Ekspert
26. februar 2003 - 15:14 #9
Hvis det er afrunding, så kan du ofte bare ligge lidt til.

Int((CDbl(1.2) - 1) * 10 + 0.000001)
Int((1.2 - 1) * 10 + 0.000001)
Avatar billede erikjacobsen Ekspert
26. februar 2003 - 15:15 #10
Det giver god mening. Når du skal opbevare 0.2 som en sum af 2 i minus
potenser, kan du ikke gøre det eksakt.
Avatar billede the_collector Novice
26. februar 2003 - 15:17 #11
Jo det gør. Erikjacobsen har givet svaret på det. Det er den reelle årsag til problemet.
Avatar billede arne_v Ekspert
26. februar 2003 - 15:17 #12
Jo.

Der er uendeligt mange flydende tal i det interval som en
floating poinst skal dække.

Derfor kan alle tallene ikke repræsenteres. Og er nødvendigt bare
at tage nærmeste.

De tal der kan repræsenteres eksakt af flydende tal er tal af formen:

(a1/2 + a2/4 + a3/8 + ...) * 2^b
Avatar billede f2 Nybegynder
26. februar 2003 - 16:01 #13
Okay, men erikjacobsen gav svaret først,.. så smid et svar, erik. :)
Avatar billede arne_v Ekspert
26. februar 2003 - 16:08 #14
Erik var først.

Men han er lidt svær at vride et svar ud af for tiden.

:-)
Avatar billede erikjacobsen Ekspert
26. februar 2003 - 17:44 #15
Tak, ingen point til mig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester