721
Papierkorb / Testataufgabe 8 - Nullstellenbestimmung
« on: June 07, 2005, 11:43:43 am »
Hi n-w, alter Kämpfer :flower: :flower:
Also nochmal.
Erklär ich gerne nochmal ist nämlich wichtig und den oben genannten Trick sollte man sich wirklich gut merken.
Was passierte denn bei einer Abfrage "if (x = 0 )" ?
Wie oben ?
Nix passiert!
Weil die Wahrscheinlichkeit, dass eine Gleitkommazahl mit Rundungsfehlern und allem Drum und Dran wirklich Null ist, die ist Null.
Du wirst also nie und nimmer (bei einer Gleitkommazahl) in diesen Zweig der Abfrage kommen.
Merke: Es gibt in der Numerik keine Null und keine Abfrage auf Null, nur eine Abfrage auf "ein kleines Intervall um Null herum"
Also geht das in erster Näherung so
if (abs(x) < epsilon) )
...und dann legt man für das Epsilon, das genannte kleine Intervall um Null halt (manuell, wissentlich, geschätzt) irgendeinen Wert fest.
Oder eben wie oben mit dem allgemein gültigen Epsion.
Warum sin(pi) als kleine Grenze um Null herum?
Konkret funktioniert das so:
Pi ist in der Entwicklungsumgebung ja nur näherungsweise definiert.
In Microsoft-Produkten (VB,C, J, etc) ist es gar nicht definiert, - im Preis nicht inbegriffen -, und ich muss mir das selber als Konstante definieren.
Die Funktion sin(x) ist ja auch fehlerbehaftet, weil sie intern als Reihe entwickelt wird.
Folglich ist sin(pi) eine gute Abschätzung der aktuellen, erreichbaren Maschinen/Rechen/Genaugkeit, die "der Rechner" und "die Entwicklungsumgebung" hergeben. Der Wert ist etwa bei 10 hoch minus 16, oder 18. Probiers aus, ist ja nur ein Zweizeiler.
Also geht man noch ein paar Zehnerpotenzen höher, wie oben genannt, und man ist bin bei Abfragen auf Null immer auf der sicheren Seite.
Nix Ironie. Handwerk.
Grüße
DIGIT
:limes_0:
Also nochmal.
Erklär ich gerne nochmal ist nämlich wichtig und den oben genannten Trick sollte man sich wirklich gut merken.
Was passierte denn bei einer Abfrage "if (x = 0 )" ?
Wie oben ?
Nix passiert!
Weil die Wahrscheinlichkeit, dass eine Gleitkommazahl mit Rundungsfehlern und allem Drum und Dran wirklich Null ist, die ist Null.
Du wirst also nie und nimmer (bei einer Gleitkommazahl) in diesen Zweig der Abfrage kommen.
Merke: Es gibt in der Numerik keine Null und keine Abfrage auf Null, nur eine Abfrage auf "ein kleines Intervall um Null herum"
Also geht das in erster Näherung so
if (abs(x) < epsilon) )
...und dann legt man für das Epsilon, das genannte kleine Intervall um Null halt (manuell, wissentlich, geschätzt) irgendeinen Wert fest.
Oder eben wie oben mit dem allgemein gültigen Epsion.
Warum sin(pi) als kleine Grenze um Null herum?
Konkret funktioniert das so:
Pi ist in der Entwicklungsumgebung ja nur näherungsweise definiert.
In Microsoft-Produkten (VB,C, J, etc) ist es gar nicht definiert, - im Preis nicht inbegriffen -, und ich muss mir das selber als Konstante definieren.
Die Funktion sin(x) ist ja auch fehlerbehaftet, weil sie intern als Reihe entwickelt wird.
Folglich ist sin(pi) eine gute Abschätzung der aktuellen, erreichbaren Maschinen/Rechen/Genaugkeit, die "der Rechner" und "die Entwicklungsumgebung" hergeben. Der Wert ist etwa bei 10 hoch minus 16, oder 18. Probiers aus, ist ja nur ein Zweizeiler.
Also geht man noch ein paar Zehnerpotenzen höher, wie oben genannt, und man ist bin bei Abfragen auf Null immer auf der sicheren Seite.
Nix Ironie. Handwerk.
Grüße
DIGIT
:limes_0: