AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sinus von 360°

Ein Thema von zecke · begonnen am 7. Mai 2005 · letzter Beitrag vom 7. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#1

Sinus von 360°

  Alt 7. Mai 2005, 16:39


ich wollte gerade mal den Sinus von 360° von einem Dellphi-Programm ausrechnen lassen. Der ist laut Taschenrechner null, da auch der Sinus von 0° null ist, ist es nur logisch.

Als Codeschnipsel dienen folgende Zeilen:

Code:
begin
Showmessage(FloatToStr(Sin(360*2*pi/360)));
end;
oder wems besser gefällt:

Code:
begin
Showmessage(FloatToStr(Sin(360*pi/180)));
end;
das Ergebnis ist nicht null sondern nähert sich lediglich. (1,0842021724855E-19 ist zwar klein aber nicht null)

Ich stehe auf dem dicksten Schlauch den ich kenne - weiß jmd warum das so ist?

hoffe mich kann jmd vom Schlauch runterschubsen

ps: ebenso ist es bei dem Sinus von 180°, nur beim Sinus von 0° stimmt das Ergebnis (liegt nahe, dass es an der Umrechnung liegt, weil es für 0 stimmt [ 0 * irgendwas = 0 ] )

pspspspsps: für cosinus und tangens hab ich es noch gar nicht probiert

2.edit: gilt auch für cosinus und tangens-winkel bei denen das Ergebnis 0 ist. außer eben für den Winkel 0°
mfg zecke
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#2

Re: Sinus von 360°

  Alt 7. Mai 2005, 16:54
Bei Floats kannst Du niemals sicher sein, dass es genau "0" ist.

Zum Formatieren probiers mal mit:

r := Sin(360*2*pi/360);
s := Format('%8.2f', [r]);
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Sinus von 360°

  Alt 7. Mai 2005, 17:00
danke - es stimmet und funktioniert - werde jetzt nochmal nachschauen, was du genau getan hast ^^

daumen hoch
mfg zecke
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#4

Re: Sinus von 360°

  Alt 7. Mai 2005, 17:29
Man sollte vielleicht noch erwähnen dass es bei Floats im Allgemeinen problematisch ist, die Werte auf genaue Zahlen auszugeben.
Ist also nicht nur bei den Trigonometrischen Funktionen so, sondern überall. Daher ist es auch immer zu empfehlen, einen Bereich um 0 abzufragen und nicht direkt 0.

Zu diesem Thema findest du hier aber noch vieles. Auch die Erklärung, warum das so ist
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Sinus von 360°

  Alt 7. Mai 2005, 17:54
Für diesen lustigen Effekt haben sich die Borländer auch schon was nettes ausgedacht:

Delphi-Referenz durchsuchen iszero() Das gibt dann true zurück, wenn der übergebene Wert so wie deine ziemlich genau 0 ist.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Sinus von 360°

  Alt 7. Mai 2005, 17:56
jap danke alexander und toxman

jetz taucht aber ein weiteres für mich bisher nicht ersichtliches problem auf. habe das ganze auf eine andere art und weise behoben, bei meiner sinus-funktion tut er alles wunderbar, doch bei cosinus und tangens hat delphi keine lsut das selbe zu tun.

hier der code für mienen knopf:

Code:
procedure TSinCosTan.Button1Click(Sender: TObject);
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
if (RadioGroup1.ItemIndex=0) then
begin
sinus:=true;
cosinus:=false;
tangens:=false;
end
else if (RadioGroup1.ItemIndex=1) then
begin
cosinus:=true;
sinus:=false;
tangens:=false;
end
else if (RadioGroup1.ItemIndex=2) then
begin
tangens:=true;
sinus:=false;
cosinus:=false;
end;

if sinus=true then
begin
Memo1.Lines.Clear;
for i:=a to b do
begin
Memo1.Lines.Add('Sinus von '+ IntToStr(i) + '°: ' + FloatToStr(Sin(i*((2*pi)/360))));
if (i=0) OR (i=180) OR (i=360) then
begin
Memo1.Lines.Add('Sinus von ' + IntTostr(i) + '°: 0');
Memo1.Lines.Delete(i);
end;
end;
end;

if cosinus=true then
begin
Memo1.Lines.Clear;
for i:=a to b do
begin
Memo1.Lines.Add('Cosinus von '+ IntToStr(i) + '°: ' + FloatToStr(Cos(i*((2*pi)/360))));
if (i=90) OR (i=270) then
begin
Memo1.Lines.Add('Cosinus von ' + IntTostr(i) + '°: 0');
Memo1.Lines.Delete(i);
end;
end;
end;

if tangens=true then
begin
Memo1.Lines.Clear;
for i:=a to b do
begin
Memo1.Lines.Add('Tangens von '+ IntToStr(i) + '°: ' + FloatToStr(Tan(i*((2*pi)/360))));
if (i=0) OR (i=180) OR (i=360) then
begin
Memo1.Lines.Delete(i);
Memo1.Lines.Add('Tangens von ' + IntTostr(i) + '°: 0');
end
else if (i=90) OR (i=270) then
begin
Memo1.Lines.Delete(i);
Memo1.Lines.Add('Tangens von ' + IntToStr(i) + '°: nicht definierbar');
end;
end;
end;
end;
alles mit standard-namen. Wie man sieht steht bei "if sinus=true" und "if cosinus=true" exakt das selbe, nur die werte sind angepasst. bei sinus funktioniert es einwandfrei doch bei cosinus nicht. das programm soll dann die eigentliche zeile (bei sinus) 0,180 und 360 löschen und eben die zeile mit ergebnis = 0 hinschreiben. beim sinus kein problem, doch beim cosinus löscht er die andere zeile nicht.

ich sehe eigentlich keinen fehler.

sieht ihn jemand von euch?
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Sinus von 360°

  Alt 7. Mai 2005, 18:19
Könntest du vielleicht [Delphi ]-tags benutzen und ein bischen einrücken?
Sonst ist der text doch sehr schwer zu lesen.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Sinus von 360°

  Alt 7. Mai 2005, 18:23
Ich denke mal das liegt an der Rundungsungenauigkeit beim Umrechnen von Grad nach Bogenmaß.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Sinus von 360°

  Alt 7. Mai 2005, 18:26
ja sry für meinen nudelsalat, aber ich habs behoben. ich weiß noch nicht warum, aber ich muss beim cosinus 2 mal die zeile "Memo1.Lines.Delete(i);" einfügen und beim tangens 3 mal. beim sinus eben nur ein mal. also es funktioniert. danke für die unterstützung.
mfg zecke
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Sinus von 360°

  Alt 7. Mai 2005, 18:30
Moin manu,

warum löscht Du die Zeilen denn überhaupt?

Prüfe doch erst, welchen Wert i hat, und dann fügst Du die eine oder die andere Zeile hinzu (if/then/else)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
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