Diskussion:Maschinenepsilon

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 23. August 2006 um 12:57 Uhr durch imported>Mathemaduenn(172632) (→‎derzeitige Form des Artikels).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Und warum ist diese kleine Zahl jetzt so wichtig, daß sie hier einen Eintrag braucht? Ein bißchen mehr Kontext bitte! Siehe auch Oma-Test. Danke. --elya 19:11, 15. Apr 2005 (CEST)

Nicht einverstanden

Der Artikel hat noch deutliche Schwächen, etwa den Gebrauch des Wortes fatal – Rundungsfehler führen zwar zu grob falschen Ergebnissen, aber in den meisten Fällen gerade nicht zu einem Programmabsturz. Wird das Maschinenepsilon angesischts der Standards für Hardware noch gebraucht? Gibt es eine C-Konstante (a la MAX_INT) für das Maschinenepsilon, so daß man auf das Ausrechnen verzichten kann? JKn sprich! 19:34, 20. Aug 2006 (CEST)

Durch den Rundungsfehler könnte z.B. eine Endlosschleife entstehen, und das wäre dann schon fatal (auch wenn man das vielleicht nicht so schreiben muss). Die Bedeutung der Zahl ist von der Entwicklung der Hardware unabhängig. Solange Zahlen digital dargestellt werden, wird es immer ein solches Maschinenepsilon geben. --ThomasO. 16:42, 21. Aug 2006 (CEST)

Wenn ihr euch am Wort fatal aufhängt, so ändert es doch, anstatt hier rumzudiskutieren. Da ne passendere Formulierung zu finden, ist wirklich nicht schwer. Abgesehen davon halte ich den Artikel relevant (siehe pro-Argumente in Löschdisk.) und die Qualität zwar nicht als herausragend, aber doch weit davon entfernt in der Mülltonne enden zu müssen. Wunderknabe 22:46, 21. Aug 2006 (CEST)

Code und Fehlerschranke

Den Code habe ich gelöscht. Indem man mit 0,5 multipliziert kann man keine "kleinste" Zahl herausbekommen. Wer will kann das ja mit Startwerten ungleich 1 ausprobieren

Entweder ist die Definition falsch oder die Fehlerschranke Beispiel:

Basis 10 Mantissenlänge 2 - 1.0+0.051=1.1>1 Das eps wäre also etwa 0.05was nichts mit 10^-1 0der 10^-2 zu tun hat--Mathemaduenn 12:10, 22. Aug 2006 (CEST)

Ich werde den Code gleich wieder reinsetzen, denn er ist korrekt. Es geht nicht darum, eine "kleinste Zahl" zu finden, sondern in der Zahlendarstellung für die "1" das niederwertigste Bit zu setzen. Dein Beispiel funktioniert nicht, weil Du die Randbedingungen verändert hast: Die Zahlendarstellung ist zur Basis 2 und die Multiplikation mit der 0,5 entspricht dabei dem Erniedrigen des Exponents um 1, entsprechend dem Bitshift nach rechts. --ThomasO. 13:18, 22. Aug 2006 (CEST)

Das es darum geht die 'kleinste' Zahl zu finden steht allerdings in der Beschreibung was das Ganze ist. Außerdem steht da etwas von Basis b und Mantisse p und nichts von b=2. Mein Beispiel bezog sich im Übrigen nicht auf den Code sondern auf den Unterschied zwischen der Definition(Beschreibung) was des epsilon ist und der genannten Fehlerschranke --Mathemaduenn 13:30, 22. Aug 2006 (CEST)
Ok, Du hast Recht. Die Beschreibung ist (in der jetzigen Version) allgemeiner als das Berechungsbeispiel. Das C-Programm setzt voraus, dass die doubles als IEEE 754 o.ä. implementiert sind (was aber Standard ist); wenn Dich das störk, sollte man es als Nebenbedingung zum Algorithmus schreiben. Er ist aber doch so anschaulich, dass er dableiben sollte. --ThomasO. 13:56, 22. Aug 2006 (CEST)
Hallo Thomas, wenn der Satz "Das Maschinenepsilon ist die kleinste positive Maschinenzahl ε, die ein Computer darstellen kann, so dass er die Ungleichung 1 < 1 + ε als erfüllt ansieht." so stimmt dann stimmt imho sowohl der code als auch die Fehlerabschätzung nicht. Code siehe ausprobieren(mit dem Startwert:1.0001 wird die Zahl wohl kleiner werden) und Fehlerabschätzung siehe Bsp. Wenn das Maschinen Epsilon etwas anderes als die Maschinengenauigkeit (machine accuracy) ist sollte das dann auch anders beschrieben werden gruß --Mathemaduenn 14:09, 22. Aug 2006 (CEST)
Hm. Die Formel 1 < 1 + eps wird auch auf der IEEE 754-Seite zitiert. Die dort angegebenen Werte von eps (1,08 x 10^-19 für long double oder 2,2 x 10^-16 für float-Arithmetik) spuckt auch der Algorithmus aus. --ThomasO. 14:56, 22. Aug 2006 (CEST)
Dort wird aber auch nicht gesagt was das epsilon sein soll... Allgemein als Maschinengenauigkeit oder relativer Rundungsfehler wie auch von p.Birken in der Diskussion ums Löschen angegeben. Bei normalisierten Zahlen sollte man beachten das die Mantisse 1 länger ist wg. der ungespeicherten aber doch vorhandenen führenden 1 deswegen sollte die Rechnung für double und Startwert knapp größer 1(aber noch darstellbar also z.B. 1.00000001) etwa ergeben. Hast Du das mal ausprobiert? --Mathemaduenn 16:14, 22. Aug 2006 (CEST)

Also klar ist doch, dass das kleinste darstellbare (1+ε) die auf die 1 folgende nächstgrößere Maschinenzahl ist. [Genau das ist m.E. auch in der Definition des Maschinenepsilons gemeint.] Diese Zahl erhalte ich, wenn ich in der Maschinendarstellung der "1" die niederwertigste Stelle inkrementiere. Diese nächstgrößere Maschinenzahl (bzw. ihre Differenz zur 1) wird für binäre double-Darstellungen von dem im Artikel angegebenen Algorithmus auch korrekt berechnet. In der Tat hat Mathemaduenn Recht damit, dass die Ungleichung auch für Werte erfüllt ist, die kleiner sind als das "Maschinenepsilon". Einen solchen Wert erhält man z.B. wenn man, wie oben vorgeschlagen, den Algorithmus mit einem anderen Startwert als 1 laufen lässt. Grund ist hier offensichtlich der Rundungsfehler, der dazu führt, dass in der Arithmethik alle Werte mit x > ε/2 auf ε aufgerundet werden, so dass dann in der Addition die Ungleichung erfüllt wird. Dies lässt sich belegen, wenn man z.B. rechnet: d := 1+ε*0,5001; d := d-1. Danach hat d den Wert ε. Ich schließe, dass die Formulierung der Bedingung im Lemma ungenau ist; sie müsste "unter Ausschluss des Rundungsfehlers" beinhalten (was sich aber vermutlich sehr verwirrend liest), von daher wäre eine ganz andere Formulierung sicher besser. (Wobei die Originaldefiniton aber m.E. dableiben sollten, denn mit der werden Tausende von Studenten malträtiert.) --ThomasO. 11:14, 23. Aug 2006 (CEST)

dass das kleinste darstellbare (1+ε) so müsste es heißen "wenn" der Abstand gemeint ist. oder die kl. Zahl für die rd(1+eps)-1=eps oder ähnlich unter Ausschluß des Rundungsfehlers reicht nicht denn 1+eps soll ja gerundet werden --Mathemaduenn 12:47, 23. Aug 2006 (CEST)
Nachtrag: Wegen der von mir zitieren Verbreitung der alten, fehlerhaften Definition habe ich sie nun mit Erklärung ergänzt, ich hoffe, das findet so Zustimmung.
Im übrigen habe ich in Mathemaduenns Definition das "aufeinanderfolgend" ergänzt. Aus meiner Sicht müsste aber noch das Wort "relativ" erläutert werden!
Mit der geänderten Formel ist das IEEE-Beispiel nun extrem verwirrend: Da ist von einer Mantissenlänge von 23 die Rede, die, wenn man sie in die Formel einsetzt, 2^-22 ergibt, als Ergebnis steht da aber 2^-23. Das muss unbedingt korrigiert/erläutert werden. --ThomasO. 12:17, 23. Aug 2006 (CEST)
Das aufeinanderfolgend zu ergänzen war auf jeden Fall richtig. Was in welcher Literatur falsch gemacht wird halte ich auf jeden Fall für uninteressant. Wenn sollte man doch sagen das 1+eps eine Gleitkommazahl sein muß dann ist's auch richtig. Im IEEE Artikel wird auch die Matisse für NZ(normalisiert?) mit 24 angegeben --Mathemaduenn 13:11, 23. Aug 2006 (CEST)
Ich finde es schon wesentlich, wenn "quasi alle" Literaturstellen das falsch schreiben. (Verstossen wir, wenn wir es richtigstellen nicht sogar gegen WP:NOR? :-)) Wenn Du das nicht schreibst, werden immer wieder Leute das hier "verschlimmbessern". --ThomasO. 13:45, 23. Aug 2006 (CEST)
Weswegen dieser Begrif vllt. auch kein Standard ist. Außer im zitierten Buch und in diversen links(Die dann vermutlich diese Buch als Grundlage haben) hab ich ihn nicht gefunden. In Schwarz/Koeckler Numerische Mathematik (5.Auflage) steht bspw. als Lemma das die Maschinengenauigkeit die kleinste Zahl eps ist so das 1<1+eps .Diese deckt sich aber ja nicht mit dem hier eingeführten Maschinenepsilon. --Mathemaduenn 14:06, 23. Aug 2006 (CEST)

Maschinenepsilon = Rundungsfehler?

Ich bin etwas verwirrt.

  1. Bei der Definition des Maschinenepsilons wird der Exponent völlig vernachlässigt. Wie kann das sein? Was nützt ein errechnetes Epsilon von 2^-23, wenn es nur für die Zahl 1 gültig ist? Jeder andere Vergleich, beispielsweise 1234 != 1234 + 2^-23, schlägt trotzdem fehl.
  2. Ist das Maschinenepsilon nicht schlicht und ergreifend mit dem Rundungsfehler identisch? --TM 15:06, 22. Aug 2006 (CEST)
ad 1. Da es relativ zum Betrag der Zahl ist, wird der Exponent rausgekürzt.
ad 2. Das angegebene Buch macht hier einen Unterschied bzw. Ja wenn man unsymmetrisch(immer zur kleinern/größeren Zahl) rundet. --Mathemaduenn 09:18, 23. Aug 2006 (CEST)

derzeitige Form des Artikels

Das Maschinenepsilon ist der relative Abstand zweier aufeinanderfolgender normalisierter Gleitkommazahlen

Diese Definition ist meiner Ansicht nach falsch, da sich das Maschinenepsilon nicht auf beliebige Gleitkommazahlen bezieht, sondern nur auf den Abstand zwischen der "1" und der nächsten Maschinenzahl > 1. Normalisierte Zahlen kommen darüber hinaus nur im speziellen Kontext von IEEE 754 vor und spielen für das Maschinenepsilon deshalb keine Rolle. Auch ist das Maschinenepsilon nicht auf Gleitkommadarstellungen beschränkt, sondern lässt sich für beliebige Darstellungen errechnen.

Mein Vorschlag wäre daher in etwa folgende Formulierung:

Das Maschinenepsilon ist der Abstand zwischen der Maschinenzahl 1 und der nächsthöheren Maschinenzahl.

Zur Formel der Berechnung des Maschinenepsilons und des nachfolgenden IEEE-Single-Beispiels:

Die Mantisse hat bei IEEE 754-Single de facto 24 Bit. Davon werden 23 Bit direkt abgespeichert. Das höchstwertige Bit wird im Exponenten "versteckt" und führt zur Unterscheidung von "Normalisierten" (Exponent>0) bzw. "Denormalisierten" (Exponent=0) Zahlen. Deshalb ist die Formel grundsätzlich korrekt. Das Maschinenepsilon für Single ist deshalb .--Kompakt 13:29, 23. Aug 2006 (CEST)

Das "relativ" hatte mich ohnehin schon gestört, s.o. Mir gefällt Dein Vorschlag sehr gut! --ThomasO. 13:41, 23. Aug 2006 (CEST)
Die "angegebene Definition" sollte eigentlich eine Beschreibung sein und ist imho auch richtig. denn wieso ist denn der Abstand der 1 zur nächsten Zahl überhaupt interessant - weil eben beliebige Vorgänger/Nachfolger Paare höchstens diesen Abstand(relativ zu ihrem Betrag) haben. und sich somit der Rundungsfehler als Hälfte dieses Wertes ergibt. Aber man kann das Ganze nat. auch anders aufziehen viele Grüße --Mathemaduenn 13:53, 23. Aug 2006 (CEST)
Inwieweit die Verwendung des Maschinenepsilons zur Abschätzung von Rundungsfehlern sinnvoll ist, steht auf einem anderen Blatt. Immerhin ist ein - zugegebenermaßen eingeschränkter - Vergleich der Genauigkeit verschiedener Zahlendarstellungen möglich. Die Quellen sprechen jedenfalls vom Abstand von 1 zur nächsthöheren Zahl. Alles andere ist WP:TF.--Kompakt 14:02, 23. Aug 2006 (CEST)
Das mit den Rundungsfehlern steht im angegebenen Buch oder hier Was soll jetzt genau Theoriefindung sein? --Mathemaduenn 14:57, 23. Aug 2006 (CEST)