Hallo Jan
> ?? Wofür war das jetzt?
Ich musste nur an das hier denken: http://xkcd.com/217/
Ansonsten hab ich nicht den Eindruck als würde irgendwer falsch rechnen.
In allen geposteten Beispielen wurde scheinbar mit ca. 16 (dezimalen)
Stellen gerechnet, das wären dann Zahlen vom Type double. Da ist es doch
kein wunder, dass nicht genau 0, sondern eben fast null, ca. 10^-16
auskommt. Auch das Pi, mit dem die Rechunung als Eingabe begann, war ja
nur auf ca. +/- 10^-16 genau angegeben, als double eben. Wenn man's
genau wissen wollte warum und wieso müsste man sich eh die binäre
Darstellung der Zahlen anschauen, z.B. hier:
http://babbage.cs.qc.edu/IEEE-754/
In Mathematik 8 sie die Sache übrigens so aus:
1 | In[39]:= $MachinePrecision
|
2 | Out[39]= 15.9546
|
3 |
|
4 | In[40]:= NumberForm[Evaluate[Exp[-I*2*Pi*1*1./2]], 20]
|
5 | Out[40]=-1. -(1.2246467991473532x10^1-16)i
|
6 |
|
7 | In[41]:= $MachineEpsilon
|
8 | Out[41]= 2.22045*10^-16
|
9 |
|
10 | In[42]:= Chop[Exp[-I*2*Pi*1*1./2]]
|
11 | Out[42]= -1.
|
Wie man sieht, mit 64bit floating points gerechnet, das gibt ca. 16
Dezimalstellen. $MachineEpsilon ist übrigens die kleinste (in der
gewählten Genauigkeit) darstellbare Differenz zu 1. Der Fehler ist
kleiner, also alles OK, find ich.
Für das Problem, dass bei numerischer Berechnung z.B. ein Imaginärteil
nicht wirklich weg fällt gibt's übrigens zumindest in Mathematica auch
eine Lösung, siehe letzten beiden Zeilen.
Die oben gepostete Matlab Ausgabe ist übrigens wohl irreführend, weil
die Zahlen gerundet ausgegeben wurden. Ich weiß grad nicht wie man die
Ausgabe aller Stellen erzwingt, vielleicht mit "format long".
Grüße
Flo