AGB  ·  Datenschutz  ·  Impressum  







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

Sinus Funktion spinnt?!

Ein Thema von Namenloser · begonnen am 11. Feb 2007 · letzter Beitrag vom 19. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:20
Hallo,
ich habe ein eigenartiges problem...

**ARGH, ich weiß nciht, wie ichs erklären soll :/ Hier ein bisschen code:**

Delphi-Quellcode:
x := cos(richtung*pi/4) -> funzt
y := sin(richtung*pi/4) -> funzt nicht
"richtung" ist dabei ein wert zwischen 0 und 8, wobei ein einer-schritt für je 45° steht.

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
  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
 
#2

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:22
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?
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
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:27
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)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:32
Hallo,

nein e+20 wäre ja 10 hoch 20 und das wäre ja ein bisschen viel.

Damit der Wert so nicht angezeigt wird, kannst du ihn für die Ausgabe formatieren, z.B.:

Format('%8.2f', [sin(StrToFloat(Edit1.Text)*pi/4)])
Albert
Live long and prosper


MrSpock
  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
 
#5

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:38
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?
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
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:40
@mr.spock: ja, aber es ist ja -5...
  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
 
#7

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:43
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?
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
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:46
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^^)
  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
 
#9

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:50
Ja, mit ffGeneral.
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
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Sinus Funktion spinnt?!

  Alt 11. Feb 2007, 17:53
Das hatte ich ja zuerst, da kamen ja exponenten raus

EDIT: ich hab mir jetzt diese kleine funktion geschrieben:

Delphi-Quellcode:
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] <> '0then
    begin
      endpos := i;
      break;
    end;
  end;
  result := copy(s,1,endpos);
  if ansilastchar(result) = '.then
    setlength(result,length(result)-1);
end;
Funktioniert, aber wenn jemand eine bessere lösung findet, darf er sie ruhig verraten
  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 20:31 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