Hmm,
warum das so ist ? Computer rechnen in Bin"ar Darstellung und
mit endlich vielen Stellen.
Eine Zahl, die sich in einem Zahlensystem als *endlicher*
Bruch darstellen l"asst z. B. 0.1 (im Dezimalsystem)
kann in einem anderen Zahlensystem ein
*unendlicher* Bruch sein und
daher nicht mehr in die endlichen Stellen passen. Der endliche
Dezimalbruch 1/10 ist im Bin"arsystem
____
0.001100
wobei der lange Strich (wie "ublich) eine unendliche Wiederholung
der Ziffernfolge anzeigt (RealDigits[0.1, 2]).
Die unendlichen Stellen m"ussen gerundet werden weshalb 2/3
als Dezimalzahl im Computer 0.66666666667 ist und nicht
_
0.6
Mit diesen Rundungsfehlern haben Leute die numerisch Rechnen
gelernt zu leben. Eine Computer Algebra hat allerdings ein
Problem, weil sie ja eingetlich auch rundungsfrei arbeiten
k"onnte wenn man sie nur l"asst. Wenn man in Mathematica einen
Dezimalpunkt eingibt, so muss man sich dar"uber klar sein,
das das System dann wieder Rundungsfehler macht. Will
man keine Rundungsfehler, kann aber den Finger nicht vom
Dezimalpunkt lassen dann hilft Rationalize[].
Noch besser ist es allerdings, mit einer Zange die Tasten mit dem
Punkt "." aus der Tastatur zu brechen und wegzuwerfen.
Gruss
Jens
Wolfgang Ludwig wrote:
>
> Liebe Mathematica Kenner
>
> Das vorhin beschriebene Problem habe ich nun doch schneller als erwartet
> gelöst, allerdings ohne zu verstehen warum.
> Mit einem kleinen Rundungsprogramm habe ich es geschafft, Mathematica
> das machen zu lassen, was ich beabsichtigte:
>
> Das Problem:
>
> FractionalPart[Log[10, #]] & /@ {0.1, 1., 10., 100., 1000., 10000.,
> 100000.,
> 1000000., 10000000.}
> liefert
>
> {-1., 0., 0., 0., 1., 0., 0., 1., 0.}
>
> anstelle von
>
> {0., 0., 0., 0., 0., 0., 0., 0., 0.}
>
> Warum das so ist, habe ich nicht verstanden. Aber es geht mit dem
> untenstehenden Rundungsprogramm:
>
> FractionalPart[Round[Log[10, #], 10]] & /@ {0.1, 1., 10., 100.,
> 1000., 10000., 100000., 1000000., 10000000.}
>
> {0., 0., 0., 0., 0., 0., 0., 0., 0.}
>
> Unprotect[Round];
> Round[x_, n_] :=
> Module[{a, nR},
> nR = Round[n];
> a = 10^nR;
> (Round[a x] // N)/a
> ];
> Protect[Round];
>
> Danke fürs Mitdenken
>
> Wolfgang Ludwig
> --
> =============================
> Dr. Wolfgang Ludwig
> managing director
> STL Systemtechnik Ludwig GmbH
> Max-Stromeyer-Str. 116
> D-78467 Konstanz
> 7531-892888-0 (phone)
> 7531-892888-88 (fax)
> www.stl-gmbh.de
> =============================