![]() |
Gleitpunktarithmetik - Diskrepanzen
warum erhalte ich für folgende x und y werte (x = 1.5e30 und y = 2e10) solche unterschiedliche werte, obwohl die gleichungen eigentlich äquivalent sein sollten.
a) result = x * y + (3-x) * y - y; = -2.0E10 b) result = 2 * y; = 4.0E10 gruß |
Re: Gleitpunktarithmetik - Diskrepanzen
Das Problem lässt sich auf folgenden Teilterm verkürzen, in dem falsch gerechnet wird: (3-x)
Und da ist es ein Problem der Genauigkeit denke ich. x hat 31 Stellen, aber selbst Extended ist nur auf bis zu 20 Stellen genau. Somit wird intern durch Rundung aus (3-x) einfach (-x), da die 3 viel zu klein ist, um das Ergebnis signifikant zu ändern. Sie stünde nämlich weit hinter der 20. Stelle die maximal noch genau wäre. Und diese Kleinigkeit führt zu deinem Phänomen. Kleine Ursache, extreme Wirkung :D. Ein hervorragendes Beispiel dafür, warum es sich fast immer lohnt Terme so weit wie möglich zu vereinfachen in der Informatik ;) Gruss, Fabian |
Re: Gleitpunktarithmetik - Diskrepanzen
ja genau das hab ich mir eigentlich auch gedacht, dass die 3 so klein ist, dass sie in dem zwischenterm 3-x nicht ins gewicht fällt und bei der genauigkeit nicht mit einbezogen werden kann.
ich habe die aufgabe aus dem studium und bei der aufgabe steht folgendes dabei: wie erklärt sich die auftretende diskrepanz zwischen den beiden ergebnissen, obwohl x und y und sämtliche zwischenergebnisse hier noch weit innerhalb der double genauigkeit liegen????? hä?? das versteh ich jetzt halt wieder net? 3-x kann ja für x = 1.5e30 eben nicht durch die Anzahl der Stellen beim Double format repräsentiert werden und muss deshalb gerundet werden. oder? |
Re: Gleitpunktarithmetik - Diskrepanzen
Rechne doch einfach mal mit der Annahme, das (3-x) = -x ist (bei Extended, wohlgemerkt).
Code:
q.e.d
result = x * y + (3-x) * y - y;
result = x * y + ( -x) * y - y; result = x * y - x * y - y; result = - y; |
Re: Gleitpunktarithmetik - Diskrepanzen
stimmt alzaimar, das macht sinn.
mich würde jedoch trotzdem interessieren, wie ist die fragestellung zu verstehen ist? was hat sich der prof dabei gedacht? Zitat:
|
Re: Gleitpunktarithmetik - Diskrepanzen
Die Fragestellung zeugt meiner Meinung nach von Unsauberkeit des Profs. Die Zwischenergebnisse liegen bei weitem eben nicht im Genaugkeitsbereich von Double. Die konstanten Werte von x und y tun dies, aber nicht (3-x)! Da hat der gute wohl böse gepatzt :roll:
|
Re: Gleitpunktarithmetik - Diskrepanzen
jo dizzy scheint mir irgendwie auch so, durch den satz, dass zwischenergebnisse im bereich von double liegen wird ja im endeffekt die ganze aufgabe unsinnig...
oder kann es noch nen anderen grund für die ergebnisse von oben geben? |
Re: Gleitpunktarithmetik - Diskrepanzen
naja gut, oder er hat gemeint, dass die zwischenergebnisse im genauigkeitsbereich von double liegen, da sie ja gerundet werden :-)
das wär aber auch leicht hohl?! :-) |
Re: Gleitpunktarithmetik - Diskrepanzen
Nee, stimmt nicht. Oder doch. äh... :gruebel:
Er meint den Wertebereich, schreibt aber etwas über Genauigkeit. Schon pervers. :stupid: Viel hübscher ist das hier (würde ich ihm als Friedensangebot überreichen):
Delphi-Quellcode:
Frage: Erscheint der/das/die Smiley?
Var
x : Extended; begin x:=-0.3; while x<0.2 do begin if x=0 then memo.lines.add('[:-)') else memo.Lines.Add(FloatToStr(x)); x := x+0.1; End; end; Wenn ja, warum? Und wenn nein: Verdammt, warum nicht? Hier liegt Alles im grünen Bereich, sämtliche Zwischenergebnisse, Startwerte etc. Oder vielleicht doch nicht? |
Re: Gleitpunktarithmetik - Diskrepanzen
stimmt, er mein höchstwahrscheinlich den wertebereich :-)
hmm kann schon sein, dass der Smilie nicht angezeigt wird. evtl wird ja der wert nicht 100%ig auf null gerundet, oder so, keine ahnung?! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz