Og ellers kan der henvises til
http://www.validlab.com/goldberg/paper.pdf
"What Every Computer Scientis Should Know About Floating-Point Arithmetic"
/nobody important
"Niels Dybdahl" <ndy@fjern.detteesko-graphics.com> wrote in message
news:4092246f$0$170$edfadb0f@dtext02.news.tele.dk...
> > hejsa
> > jeg har et underligt problem med float casts.
> > case 1:
> > jeg beregner en simpel linjelængde.
> > double tempSqr = Math.sqrt((double) ((c.getX()-lastX)*(c.getX()-lastX) +
> (c.getY()-lastY)*(c.getY()-lastY)));
> > denne kastes til float og i det fejlende tilfælde giver det: 6.3639607
> > case 2:
> > jeg har beregnet samme tal via lommeregner og fået 6.36396103068
> > Denne værdi caster jeg med "(float) nummer" og så får jeg: 6.36391
> > hvorfor er det lige at denne cast er forskellig? det er jo samme tal jeg
> caster,
> > den ene gang er det gemt i en double og den anden gang er det
> hardcoded/skrevet direkte
> > ind.
>
> Det er nok fordi ingen af tallene 6.3639607, 6.363961 og 6.36396103068 kan
> skrives præcist som float. float er baseret på grundtallet 2 og kan
normalt
> ikke representere "kommatal" baseret på grundtallet 10 præcist.
> De eneste tal du kan skrive præcist som float er dem du kan komme frem til
> ved at addere 1, 0.5, 0.25, 0.125 etc så hvis tallet ikke slutter på
cifret
> 5, kan du være sikker på at det ikke kan representeres korrekt.
> Dvs ingen af de tal som du har nævnt er de samme tal, når de først er inde
i
> computeren.
>
> Niels Dybdahl
>
>