Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Cosinus gibt falschen Wert aus (https://www.delphipraxis.net/179731-cosinus-gibt-falschen-wert-aus.html)

YXCVBNM1 27. Mär 2014 16:29

Cosinus gibt falschen Wert aus
 
Hallo allerseits,

ich habe ein ganz komisches Problem.

Die Zeile

Edit1.Text:= FloattoStr(Cos(0.5*Pi))

gibt bei ihrer Ausführung im Edit1 ungefähr -2,7 aus. Meiner Meinung nach (und nach der des Taschenrechners) müsste aber 0 rauskommen.
Die Unit Math ist auch in den Uses vorhanden.

Hat jemand eine Ahnung woran dieser Rechenfehler liegen könnte?

Furtbichler 27. Mär 2014 16:34

AW: Cosinus gibt falschen Wert aus
 
Na ich würde nochmal gaaanz genau hinschauen. Vermutlich steht da sowas wie '-2,72000000000000000000000E-45' oder so.

YXCVBNM1 27. Mär 2014 16:39

AW: Cosinus gibt falschen Wert aus
 
Ach was für ein blöder Fehler. Manchmal sucht man eine halbe Ewigkeit nach einem Fehler und dann ist das sowas primitives.

Vielen Dank :)

Der schöne Günther 27. Mär 2014 16:52

AW: Cosinus gibt falschen Wert aus
 
Zitat:

Zitat von YXCVBNM1 (Beitrag 1253688)
Meiner Meinung nach (und nach der des Taschenrechners)

Ich glaube dafür gehörst du schon geknufft. :love:

Nicht nur der Taschenrechner, auch der eigene Kopf.



Spaß beiseite: Wenn du Kommazahlen zuverlässig in einem String ausgeben willst, würde ich mir die Funktion
Delphi-Quellcode:
FormatFloat(..)
einmal ansehen.

Beispiel:

Delphi-Quellcode:
procedure TForm25.FormCreate(Sender: TObject);
const
   formatStr: String = '#0.00';
var
   zahl: Single;
begin
   zahl := Cos(0.5 * Pi());


   memo1.Lines.Append('Vorher:');
   memo1.Lines.Append( zahl.ToString() );

   memo1.Lines.Append(sLineBreak);

   memo1.Lines.Append('Nachher:');
   memo1.Lines.Append( FormatFloat(formatStr, zahl) );

end;

Popov 27. Mär 2014 16:52

AW: Cosinus gibt falschen Wert aus
 
Winkel und Bogenmaß?

Der schöne Günther 27. Mär 2014 16:54

AW: Cosinus gibt falschen Wert aus
 
Wenn ich mich nicht irre scheint die Embarcadero-Philosophie zu sein, das Ergebnis von trigonometrischen Funktionen immer im Gradmaß zurückzugeben.

Helmi 27. Mär 2014 16:56

AW: Cosinus gibt falschen Wert aus
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1253695)
Delphi-Quellcode:
procedure TForm25.FormCreate(Sender: TObject);
{...}
   memo1.Lines.Append( zahl.ToString() );
{...}

*hüstel*
falsche Programmiersprache :-)


Delphi-Quellcode:
   memo1.Lines.Append(IntToStr(zahl));

himitsu 27. Mär 2014 17:12

AW: Cosinus gibt falschen Wert aus
 
Zitat:

Zitat von Helmi (Beitrag 1253699)
*hüstel*
falsche Programmiersprache :-)

In neueren Delphis geht das.
Seitdem Record-Helper nun auch endlich für generische Typen verfügbar sind, haben String, Integer und Co. auch eine ToString-Methode, so wie es TObjekt von Grund auf ja auch schon seit 'ner Weile hat.

Zitat:

Zitat von Der schöne Günther (Beitrag 1253698)
Wenn ich mich nicht irre scheint die Embarcadero-Philosophie zu sein, das Ergebnis von trigonometrischen Funktionen immer im Gradmaß zurückzugeben.

Ist es nicht Rad?

Und nein, das ist nicht Delphi/Borland, sondern kommt so direkt von der CPU (früher FPU).

Stevie 27. Mär 2014 17:22

AW: Cosinus gibt falschen Wert aus
 
Zitat:

Zitat von himitsu (Beitrag 1253702)
Seitdem Record-Helper nun auch endlich für generische Typen verfügbar sind

Du meinst wohl für simple Typen - für generische Typen gibt's nach wie vor keine Helper.

himitsu 27. Mär 2014 17:33

AW: Cosinus gibt falschen Wert aus
 
Aber AnsiString, UnicodeString und LongInt sind doch generische Typen, oder hieß das doch ein bissl anders? :gruebel:
Also die grundsätzliche Basistypen des Compilers, oder so ... nicht zu verwechseln mit den Generics.


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