Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 10:00

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rundungsfehler
BeitragVerfasst: Mi Apr 11, 2012 20:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
kann nach 12 rotationen (alle entweder Pi/3 oder der Winkel zwischen zwei Dreiecken eines Tetraeders) mit einer geometry.TAffineMatrix (also 3x3, einfache Genauigkeit) der Rundungsfehler bei etwa Pi/18 liegen?

(ich versuche gerade ein Tetraeder ähnlich dem Sierpinski-Dreieck zu zeichnen, und zwar in einer durchgehenden Linie mittels L-System)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rundungsfehler
BeitragVerfasst: Mi Apr 11, 2012 21:12 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Ich weiss ja nicht, mit welcher Genauigkeit du Pi verwendest bzw. deine anderen Fehler aber bei einer 32bit Float genauigkeit, würde ich den Wert für etwas zu groß einschätzen... glaube nicht, dass der Rundungsfehler so groß ist.
ggf. auf 64bit Genauigkeit umstellen (double) und schauen ob es besser wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rundungsfehler
BeitragVerfasst: Do Apr 12, 2012 09:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
das Problem ist, die Geometry kann kein double, sonst hätte ich das gemacht, bevor ich hier gefragt habe bzw sonst würde ich sowieso double benutzen.

edit: die Pi/18 war eine Schätzung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rundungsfehler
BeitragVerfasst: Do Apr 12, 2012 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
also der Rungungsfehler ist tatsächlich nicht annähernd so groß. ich habe den Fehler mitlerweile gefunden, und zwar dort, wo ich ihn am wenigsten erwartet hätte: ich habe den Winkel nicht richtig berechnet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rundungsfehler
BeitragVerfasst: Do Apr 12, 2012 17:18 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
sharkman hat geschrieben:
kann nach 12 rotationen (alle entweder Pi/3 oder der Winkel zwischen zwei Dreiecken eines Tetraeders) mit einer geometry.TAffineMatrix (also 3x3, einfache Genauigkeit) der Rundungsfehler bei etwa Pi/18 liegen?

Ist in dem Fall zwar nicht so krass, aber im Prinzip darf es nicht überraschen... Bei Fließkomma darf man sich nicht einmal auf das Vorzeichen verlassen :-)
Code:
  1. 10^20-10^20+23-13+222=232
  2. 10^20+23-10^20-13+321=308
  3. 10^20+23-13-10^20+321=321
  4. 10^20+23-13+321-10^20=0
  5. 10^20+23+321-10^20-13=-13

Ganz grob ist es so, dass besonders häufig kritisch wird, wenn Du beim addieren/subtrahieren eine echte subtraktion ähnlich großer zahlen machst, z.B. verlierst Du schon durch 0.1234-0.1233=1*10^-4 drei gültige Ziffern. Dividieren gibt große Fehler, wenn Du durch sehr kleine Zahlen dividierst. Beides kann Dir auch schon beim 3x3 Matrizenmultiplizieren passieren. Wenn man natürlich schon verkehrt rechnet hat, geht der relative fehler besonders schnell richtung unendlich :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rundungsfehler
BeitragVerfasst: Do Apr 12, 2012 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wenn du Probleme mit Rundungsfehlern hast sind Quaternionen eine Option. Diese verhalten sich wesentlich stabiler als Matrizen. Mit Quaternionen ist es auch kein Problem etwa jedes Frame etwa um "deltaTime" zu drehen. Der resultierende Drehwinkel ist natürlich genauso ungenau, dafür hast du aber keine Probleme mit Matrizen deren Vektoren nicht mehr zueinander orthogonal sind. Das sorgt für fiese Verzerrungen bei deinen Meshes. Einfach hin und wieder das Quaternion mal wieder normalisieren und gut ist.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rundungsfehler
BeitragVerfasst: Do Apr 12, 2012 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Möchte an dieser Stelle mal auf den Artikel hinweisen, den Tak neulich verlinkt hat: don't store that in a float (Allgemeine Behandlung des Float-Genauigkeits-Problems und wie man damit am besten umgeht)

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]