← Back to team overview

sslug-teknik team mailing list archive

Re: Irriterende!!!

 

Christian Hansen wrote:
> 
> u har jeg lige opdaget en meget irriterende fejl i Mange af de
> lommeregnere, der kommer med de forskellige windowmanagere.
> 
> Prøv at kvadrer tallet 1,0000001 27 gange. Resultatet skulle helst gi
> 674530,4707 med 10 betydende cifre.
> 
> KDE og GNOME's lommeregner melder ud med 674530,4755
> 
> Min Casio lommeregner får det til 674529,1097

Ja, og min HP48G får 674514,86877. 

Matlab (under HP/UX på en HPPA RISC processor) giver:

x =

     6.745304755217875e+05  (=674530,4755)

Hvilket faktisk er _præcist_ hvad med hvad KDE & GNOME lommeregnerne
giver

Følgende "bc" program:

t=0;
x=1.0000001
while (t<27) {
        x = x * x;
        t++;
}
print x;

giver 671189.6536185
      ==============   

> Men Windows98 har ingen problemer. Den får det rigtige resultat.

Egentlig ikke. Når du kommer ud omkring maskinnøjagtigheden, så afhænger
resultatet helt af hvorledes matematikbiblioteket er implementeret. SVJH
har Intel processorer 80 bit i floation-pointregistrene, mens en double
ifølge IEEE754 kun er 64 bit. Windows bruger måske de fulde 80 bit, mens
matematikbibliotekerne under linux følger IEEE standarden. Men faktisk
er ingen af dem korrekte pga. afrunding. Det er "bc" programmet der er
korrekt (burde ihvertfald være, det er jo svært at regne efter!)

Puha, det var en længere smøre. Jeg har for meget tid til overs :)

Mvh Morten


Follow ups

References