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/)
-   -   Delphi Invers Cosinus Probleme (https://www.delphipraxis.net/56994-invers-cosinus-probleme.html)

Weazy 14. Nov 2005 19:22


Invers Cosinus Probleme
 
Hi,

ich habe da noch so ne blöde frage:


wenn ich in folgender Funktion als z eine real Zahl einsetze, ist das Resultat "NAN". Wenn ich hingegen -1 einsetze ist das Ergebniss korrekterweise 180.

radtodeg(arccos((z)));

Wisst ihr woran das liegt?

dizzy 15. Nov 2005 00:53

Re: Invers Cosinus Probleme
 
Was für Werte hast du denn eingegeben? Definiert ist der Arcuscosinus nur über -1..1. Alles darüber und darunter sollte jedoch eher eine Exception statt NaN liefern :gruebel:

himitsu 15. Nov 2005 03:00

Re: Invers Cosinus Probleme
 
Es kommt auf die Fehlerbehandlung an, wenn diese abgestellt ist, wird korrekter Weise NaN (Not a Number) zurückgegeben, wenn sich ein Fehler ereignet hat.

Und wwie dizzy schon sagte, was gibts du für Werte dort ein?
Diese dürfen ja schließlich nur in einem bestimmten Bereich liegen.

-1 <= Z <= 1

Weazy 15. Nov 2005 10:30

Re: Invers Cosinus Probleme
 
Ich hab es gefunden! Ich runde den eingegbenen Wert einfach mit Roud()!

Vielen Dank trotzdem!

dizzy 15. Nov 2005 18:04

Re: Invers Cosinus Probleme
 
Äääähm, damit sorgst du dafür dass arccos() ganze 3 mögliche Ergebnisse liefert - und das ist gewiss nicht akkurat :roll:. Eine wirkliche Lösung des Problems kann das imho nicht sein ;)

Weazy 15. Nov 2005 19:37

Re: Invers Cosinus Probleme
 
Wie denn das?

3_of_8 15. Nov 2005 19:39

Re: Invers Cosinus Probleme
 
:shock:

Ganz einfach: Dann hast du entweder:
-1,0, oder 1. Und damit auch nur drei verschiedene Ergebnisse. Das bringts auch voll.

Weazy 15. Nov 2005 22:08

Re: Invers Cosinus Probleme
 
Wie kann man dann z.b auf 5 Stellen genau runden?

himitsu 15. Nov 2005 22:18

Re: Invers Cosinus Probleme
 
Ganz genau Runden geht eh nicht ... liegt halt an der internen Struktur der Typen (Single, Double...).

Aber du kannst es so machen:
X := Runden(X * 10^5) / 10^5;
Delphi-Quellcode:
X := Round(X * 100000) / 100000;

Und hast du mal nachgesehn, was du für Werte in z übergibst?
Notfalls mal vorher testen:
Delphi-Quellcode:
If (z < -1) or (z > 1) Then
  MessageBox('Fehler: ' + FloatToStr(z), ...

3_of_8 15. Nov 2005 22:37

Re: Invers Cosinus Probleme
 
Ich hab das ganze mal getestet:

Delphi-Quellcode:
with memo1.lines do
begin
add(floattostr(radtodeg(arccos(-1))));
add(floattostr(radtodeg(arccos(-0.75))));
add(floattostr(radtodeg(arccos(0))));
add(floattostr(radtodeg(arccos(0.75))));
add(floattostr(radtodeg(arccos(1))));
add(floattostr(radtodeg(arccos(1.0001))));
end;
Alle Befehle haben ein korrektes Ergebnis gebracht, der letzte Befehl (quod erat exspectandum) eine Exception (Ungültige Gleitkommaoperation).


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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