Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wurzel ziehen und anschließend quadrieren Problem (https://www.delphipraxis.net/155286-wurzel-ziehen-und-anschliessend-quadrieren-problem.html)

Azaldur 16. Okt 2010 11:25

Delphi-Version: 2009

Wurzel ziehen und anschließend quadrieren Problem
 
Hallo,
Ich hab einen kleinen Taschenrechner programmiert, der u.a. die Wurzel ziehen und quadrieren kann. Wenn ich nun die Wurzel ziehe, z.b. von 89, und das ergebnis danach wieder quadriere, kommt jedoch 88,999999 raus und nicht 89. Jemand ne idee was man da machen kann? Die variablen sind jeweils real, mit extended kommt aber das gleiche bei raus.

Grüße

sx2008 16. Okt 2010 12:36

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Also es gibt nichts was man dagegen tun kann;
es liegt in der Natur der binären Fließkommazahlen, das es zu Rundungsfehlern kommt.
Ausserdem entstehen beim Wurzelziehen irrationale Zahlen mit unendlich vielen Nachkommastellen.
Es können aber nur eine best. Anzahl von Stellen gespeichert werden.
Zwangläufig muss hier ein Verlust an Genauigkeit auftreten.

Du solltest aber alle "real" in "extended" ändern.
Ein Taschenrechnerprogramm sollte immer in der höchstmöglichen Genauigkeit arbeiten.

Azaldur 16. Okt 2010 12:40

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Alles klar, danke dir :).

Morphie 16. Okt 2010 13:15

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Irgendwie ist es schon möglich... Gibt ja schließlich Taschenrechner, die das beherschen...

Kalakmul 16. Okt 2010 13:25

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Wahrscheinlich "tricksen" hier die Taschenrechner ein wenig. Z. B. könnten sie intern mit einer etwas größeren Genauigkeit rechnen als sie anzeigen. Wenn dann eine Zahl größer als 5 hinter der kleinsten dargestellten Zahl (im Beispiel eine 9, bzw. eine Folge von 9ern) herauskommt, runden sie von hinten sukzessive auf und im genannten Beispiel kommt letztlich eine 89 dabei heraus.

Programmiertechnisch müsste sich da also mit einem geschickten Rundungsbefehl etwas machen lassen.

Sir Rufo 16. Okt 2010 13:32

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Schau mal hier
Vielleicht hilft dir das

Azaldur 16. Okt 2010 14:02

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Danke, denke damit komm ich weiter :-D. Hab noch ne frage die zwar nicht ganz zum thema passt, aber immerhin so halb ;). In meinem programm müssen verschiedene werte mit 0 verglichen werden, also auf gleichheit, bzw. ungleichheit. Die werte können auch mal relativ klein sein. Sollte man generell beim vergleichen von werten mit epsilon(nen sehr kleines) arbeiten, also auch beim vergleich mit 0? hab das bisher nur beim vergleich 2er werte <> 0 so gemacht, also 2 Werten die nach einer Rechnung rauskamen. Aber nicht wenn ich ausschließen wollte das z.b. ein Zwischenergebnis=0 ist.

Wolfgang Mix 16. Okt 2010 16:15

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Mit Null vergleichen klappt fast nie. Versuche es einmal mit IsMathZero aus der Unit Math.

Azaldur 16. Okt 2010 16:23

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Hm was ist denn der Grund das mit 0 vergleichen schwierig ist? Also z.b. ob Zahl<>0 oder Zahl=0 ist. Bisher hatte ich eigentlich keine Probleme damit. Was macht isMathZero genau bzw. wo liegt der unterschied zu der epsilon Veriante?

Wolfgang Mix 16. Okt 2010 16:32

AW: Wurzel ziehen und anschließend quadrieren Problem
 
Dieser Thread könnte dich interessieren:

http://www.delphipraxis.net/137624-%...ig-loesen.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz