Mathe-Bug oder numerische Ungenauigkeit?

05/12/2008 - 12:37 von Andreas Maier | Report spam
Hallo,

ich benutze Python 2.4.2 auf SLED 10.2 64bit und bin auf folgendes
seltsame Ergebnis
gestossen:




from math import *
pi%pi






0.0



(10*pi)%pi






0.0



(11*pi)%pi






3.1415926535897896 # sollte eigentlich auch 0.0 sein, oder?

Was passiert hier zwischen 10*pi und 11*pi? Ist das ein Bug oder làsst
sich das auch
durch numerische Rundungsfehler erklàren?

Gruß,
Andreas Maier

P.S.:




for i in xrange(0,32):






... print i, (i*pi)%pi
...
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 0.0
6 0.0
7 0.0
8 0.0
9 0.0
10 0.0
11 3.14159265359
12 0.0
13 3.5527136788e-15
14 0.0
15 3.14159265359
16 0.0
17 3.5527136788e-15
18 0.0
19 3.14159265359
20 0.0
21 3.5527136788e-15
22 3.14159265359
23 3.14159265359
24 0.0
25 3.5527136788e-15
26 7.1054273576e-15
27 3.14159265359
28 0.0
29 3.5527136788e-15
30 3.14159265359
31 3.14159265359

...seltsam, oder?
 

Lesen sie die antworten

#1 Thomas Rachel
05/12/2008 - 13:30 | Warnen spam
Andreas Maier schrieb:

from math import *
pi%pi






0.0
(10*pi)%pi






0.0
(11*pi)%pi






3.1415926535897896 # sollte eigentlich auch 0.0 sein, oder?

Was passiert hier zwischen 10*pi und 11*pi? Ist das ein Bug oder làsst
sich das auch
durch numerische Rundungsfehler erklàren?



Ich denke auf jeden Fall letzteres. Spzeiell in diesem Fall:


for i in xrange(0,32):






... print i, min((i*pi)%pi,(i*pi)%pi-pi,key=lambda i:abs(i))
...
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 0.0
6 0.0
7 0.0
8 0.0
9 0.0
10 0.0
11 -3.5527136788e-15
12 0.0
13 3.5527136788e-15
14 0.0
15 -3.5527136788e-15
16 0.0
17 3.5527136788e-15
18 0.0
19 -3.5527136788e-15
20 0.0
21 3.5527136788e-15
22 -7.1054273576e-15
23 -3.5527136788e-15
24 0.0
25 3.5527136788e-15
26 7.1054273576e-15
27 -3.5527136788e-15
28 0.0
29 3.5527136788e-15
30 -7.1054273576e-15
31 -3.5527136788e-15


Ich berechne also von jedem Argument den Abstand zu 0 und zu Pi. Der
kleinste von beiden wird genommen.

Deine Beobachtung wr also, daß Dein scheinbares Pi ein klienes Stückchen
drunterliegt und somit eben "nicht ganz Pi" ist...


Thomas

Ähnliche fragen