![]() |
Sinus Funktion spinnt?!
Hallo,
ich habe ein eigenartiges problem... **ARGH, ich weiß nciht, wie ichs erklären soll :/ Hier ein bisschen code:**
Delphi-Quellcode:
"richtung" ist dabei ein wert zwischen 0 und 8, wobei ein einer-schritt für je 45° steht.
x := cos(richtung*pi/4) -> funzt
y := sin(richtung*pi/4) -> funzt nicht Bei cos kommt das richtige ergebnis raus, aber bei sin -5kommairgendwasE-20 Ich bin echt am verzweifeln, da ich keinen plan ahbe, woran das liegt :wall: |
Re: Sinus Funktion spinnt?!
Du sagst, es kommt "-5kommairgendwasE-20" raus. Da Gleitkommazahlen de facto nicht ganz genau sind, kann es gut sein, dass er damit 0 meint. Kommt das hin?
|
Re: Sinus Funktion spinnt?!
Ja, das könnte sein, komischerweise kommt bei der Ausgabe als text aber -1 heraus o.O
Wie kann man das denn verhindern? Übrigens wundert es mich, dass da steht -5.blaE-20, müsste es denn nicht 5.blaE+20 heißen? edit: ja, ich hab es überprüft, es muss tatsächlich null sein (bei der cosinus-funktion passiert übrigens bei dem entgegengesetzten winkel das gleiche, wie ich soeben bemerkt habe) |
Re: Sinus Funktion spinnt?!
Hallo,
nein e+20 wäre ja 10 hoch 20 und das wäre ja ein bisschen viel. :mrgreen: Damit der Wert so nicht angezeigt wird, kannst du ihn für die Ausgabe formatieren, z.B.:
Delphi-Quellcode:
Format('%8.2f', [sin(StrToFloat(Edit1.Text)*pi/4)])
|
Re: Sinus Funktion spinnt?!
Na dann passt ja alles. ;)
Gleitkommawerte sind manchmal etwas... gewöhnungsbedürftig. Hier ein paar Beispiele: 0 ist nicht gleich 0: Es gibt ein +0 und ein -0, die beide aus Berechnungen entstehen können. Beim Rechnen fällt das nicht weiter auf, bei der Textausgabe schon. Manchmal schlägt die Genauigkeit zu und aus einer 0 wird ein irgendwas*10^-20 oder so 1/+0=+INFINITY 1/-0=-INFINITY -1/+0=-INFINITY -1/-0=+INFINITY Also bei sowas nicht wundern. ;) EDIT: Was soll denn an dem E-20 nicht stimmen? |
Re: Sinus Funktion spinnt?!
@mr.spock: ja, aber es ist ja -5...
|
Re: Sinus Funktion spinnt?!
Also.
-5E-20 bedeutet -5*10^(-20) 5E20 bedeutet 5*10^20 Das erste ist -0.00000000000000000005 und das zweite 500000000000000000000. Siehst du den Unterschied? |
Re: Sinus Funktion spinnt?!
Vielen Dank an alle, ich habe es jetzt so gelöst:
floattostrF(num,fffixed,15,7) Aber eine Frage hätte ich noch: Durch das fffixed (vorher hatte ich ffgeneral, daran lags wohl (?)), werden dei ganzen überflüssigen nullen mit angezeigt. Gibt es eine Option, die "wegzumachen", oder muss ich das selber machen? @3_of_8: ok, ich geb mich geschlagen^^ (Exponent hatten wir auch in der schule eigentlich noch nicht^^) |
Re: Sinus Funktion spinnt?!
Ja, mit ffGeneral. ;)
|
Re: Sinus Funktion spinnt?!
Das hatte ich ja zuerst, da kamen ja exponenten raus :(
EDIT: ich hab mir jetzt diese kleine funktion geschrieben:
Delphi-Quellcode:
Funktioniert, aber wenn jemand eine bessere lösung findet, darf er sie ruhig verraten :D
function erasezeros(s: string): string;
var i: integer; endpos: integer; begin if pos('.',s) = 0 then begin result := s; exit; end; for i := length(s) downto pos('.',s) do begin if s[i] <> '0' then begin endpos := i; break; end; end; result := copy(s,1,endpos); if ansilastchar(result) = '.' then setlength(result,length(result)-1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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