AGB  ·  Datenschutz  ·  Impressum  







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

Falsche Ausgabe von Floatwerten

Ein Thema von Wolfgang Mix · begonnen am 30. Nov 2009 · letzter Beitrag vom 3. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#1

Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 18:56
Moin,

teste gerade die Taylorreihe von Pi.
nach Term 28 (step) gibt es keine neuen Werte.
Was mache ich falsch?

[Edit] Ausgabe formatieren ? [/Edit]
Gruß

Wolfgang

Delphi-Quellcode:
function my_pi(steps:integer):double;
Var i:integer; s,ds:double;
Begin
   s:=1;
   for i:=1 to steps do
   begin
      ds:=power(-1,i)/((2*i+1)* power(3,i));
      s:=s+ds;
   end;
   result:=6/sqrt(3)*s;
End;

procedure TForm1.Button1Click(Sender: TObject);
var steps:integer;
begin
  steps:=StrToInt(SpinEdit1.Text);
  Edit1.Text:=FloatToStr(my_pi(steps));
end;
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 19:01
Kann es sein, dass der double-Typ zu ungenau für weitere Steps ist? Immerhin liefert das hier:

ds:=power(-1,i)/((2*i+1)* power(3,i)); ja (betragsmäßig) sehr, sehr kleine Werte für große i. Am Endergebnis ändert sich also irgendwann nichts mehr [edit], weil ds praktisch 0 wird. [/edit]

Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 19:06
Der Windowsrechner liefert ja erheblich mehr Nachkommastellen
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 19:08
Bei i=28 steht unter deinem Bruchstrich 1.303.977.169.932.777. 16 Stellen ist schon nahe an der Grenze dessen was ein Double noch genau darstellen kann. Du rennst hier in der Tat in das offene Messer der Floats: Ungenauigkeit bei extrem kleinen und großen Werten. Einzige Lösung hierzu: Die Rechnung so umstellen, dass keine so extremen Zwischenergebnisse mehr vorkommen, oder eine BigNum-Unit verwenden.

Edit: Der Windows Taschenrechner benutzt imho eine Art von BigNum Implementierung.

Edit2: Ich seh grad dass du ja auch noch aufsummierst. Da ist definitiv das Ende der Fahnenstange. Aber sowas von! Edit3: Okay, nicht die großen Werte, aber auch bei den sehr kleinen tritt das Problem ähnlich auf, nur eben auf der "anderen Seite" vom Komma. Ab einem gewissen Punkt addierst du im Wesentlichen Nullen, und auch das Weiterrechnen mit 6/sqrt(3)*s tut nicht beonders gut. Jede weitere Operationen auf grenzwertigen Werten macht das Ergebnis nur noch ungenauer.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 19:12
In der DP gibt es mehrere MatheLibs, die mit "extremen Zahlen" umgehen können. Evtl. kann man mit diesen ein genaueres Ergebnis erzielen. Für i = 28 liefert die Zeile, die ich oben zitiert hab folgenden Wert für ds: 7,66884592045082*10^(-16), also einen verdammt kleinen Wert. Das ist immerhin eine Zahl mit 15 (!) Nullen nach dem Komma, bis die erste Nicht-Null kommt! Das bedeutet aber auch, dass sich an dem Endergebnis nicht mehr viel ändert, egal wie oft du das ganze machst. Was kommt denn bis jetzt als Näherungswert für Pi raus?

Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 19:35
Danke für die Antworten, jetzt komme ich weiter
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Falsche Ausgabe von Floatwerten

  Alt 30. Nov 2009, 20:07
@patti:
3,14159265358979

[Edit] Das ist gerade 'mal ein bißchen besser als mein Taschenrechner von Aldi
für3,99 Euronen hergibt [/Edit]
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Falsche Ausgabe von Floatwerten

  Alt 3. Dez 2009, 16:29
Zitat von Wolfgang Mix:
@patti:
3,14159265358979

[Edit] Das ist gerade 'mal ein bißchen besser als mein Taschenrechner von Aldi
für3,99 Euronen hergibt [/Edit]
Der Taschenrechner hat die Zahl Pi mit Sicherheit aber als Konstante definiert. Wenn du vorhast, mit Pi weiterzurechnen, wirst du beliebig viele Stellen im Internet finden, das Ergebnis wird dann beliebig genau. Für die Praxis ist das aber gar nicht nötig. Du kannst selbst mit den 14 Nach-Kommastellen, die du herausgefunden hast, den Umfang der Erde (bei einem Erd-Radius von 6400 km !) auf weit weniger als einen Millimeter (!) genau bestimmen:

Code:
40204,8 (3,141)
40211,2 (3,1415)
40212,352 (3,14159)
40212,3776 (3,141592)
40212,3859659494 (3,14159265358979) <-- dein Wert
40212,3859659494 (3,141592653589793238462643383279502884197169399) <-- 45 Stellen n. d. Komma
Nach einpaar Nachkommastellen wird es also für die Praxis uninteressant

Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#9

Re: Falsche Ausgabe von Floatwerten

  Alt 3. Dez 2009, 17:26
Zitat von patti:
...
Nach einpaar Nachkommastellen wird es also für die Praxis uninteressant :-D
Patti
Und damit machst Du genau einen ähnlichen Fehler wie BICE (Borland, Inprise, Codegier, Embadingens)!!

Wie willst Du zB sin/cos für große Werte ausrechnen, wenn Du Pi oder 2/Pi nicht auf ausreichend viele Stellen kennst? Für den vollen extended-Bereich braucht man ca 16000 Bits von 2/Pi!

Gruß Gammatester
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Falsche Ausgabe von Floatwerten

  Alt 3. Dez 2009, 18:28
Zitat von gammatester:
Wie willst Du zB sin/cos für große Werte ausrechnen, wenn Du Pi oder 2/Pi nicht auf ausreichend viele Stellen kennst?
Es mag sein, dass ich dafür genauere Werte für Pi brauche. Es ging mir aber eigentlich darum, zu zeigen, dass für einfache Berechnungen von Flächen, Volumen, etc. einpaar Nachkommastellen von Pi absolut ausreichen, um ein vernünftiges Ergebnis zu bekommen. Die nötige Genauigkeit hängt natürlich davon ab, was ich damit vorhabe.

MFG
Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  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 23:20 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