AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectX 9 - (Verständnis-)Problem mit Pi
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX 9 - (Verständnis-)Problem mit Pi

Ein Thema von Puhbaehr · begonnen am 10. Mai 2006 · letzter Beitrag vom 11. Mai 2006
Antwort Antwort
Puhbaehr
(Gast)

n/a Beiträge
 
#1

DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 10. Mai 2006, 21:49
Servus!

Als ich eben einen Kreis berechnen wollte nutzte ich D3DX_PI aus der d3dx9.pas.

D3DX_PI ist dort in der Unit als Konstante deklariert:

Delphi-Quellcode:
const
  D3DX_PI : Single = 3.141592654;
Laut Definition ist das in etwa korrekt.
(π ≈ 3,141 592 653 589 793 238 462 643 383 279 ...)

Ich wollte nun mit D3DX_PI Koordinaten eines Kreis berechnen und bemerkte beim Debuggen Ungenauigkeiten in den Ergebnissen.

Beim näheren Hinsehen und draufhalten der Maus auf D3DX_PI zeigte Delphi D3DX_PI = 3.141592741. Lasse ich mir PI in einem Meldungsfenster ausgeben so wird sogar D3DX_PI = 3.14159274101257 ausgegeben.

Ähm...ist das nun ein Fehler der CPU oder ein Denkfehler?

Die d3dx9.pas habe ich von der Seite von http://www.martinpyka.de/

Ich wäre für Aufklärung dankbar!

Gruß, Robert
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 10. Mai 2006, 21:53
Ich würde es nicht Fehler nennen, da Single sowieso nur mit den ersten 8 Nachkommatsellen rechnet, wo der Rest herkommt weiß ich jedoch nicht...


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 10. Mai 2006, 22:01
Sagen wirs so:
Nehmen wir an, dass du mit dem "falschen" Pi einen Kreis zeichnen würdest. Damit am Ende des Kreises eine Abweichung von 1 mm entstünde, müsste der Kreis einen Radius von 5,7 km haben (Rechenfehler meinerseits nicht ausgeschlossen ).

@Flare: Ist ein Rundungsfehler kein Fehler ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#4

Re: DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 10. Mai 2006, 22:04
Zitat von Khabarakh:
@Flare: Ist ein Rundungsfehler kein Fehler ?
Es ist schon ein Fehler, aber ein "beabsichtigter", man hätte ja auch Double für Pi benutzen können, aber man brauch es nicht. Also ist es ein Fehler den man verkraftet, kennt, duldet, usw. In meinen Augen ist es kein Fehler mehr


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#5

Re: DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 10. Mai 2006, 22:17
Zitat von Khabarakh:
Sagen wirs so:
Nehmen wir an, dass du mit dem "falschen" Pi einen Kreis zeichnen würdest. Damit am Ende des Kreises eine Abweichung von 1 mm entstünde, müsste der Kreis einen Radius von 5,7 km haben (Rechenfehler meinerseits nicht ausgeschlossen ).
Du meinst wäre Pi ungenau würde es selbst bei einem größeren Kreis nicht auffallen. Ich hab die Definitionsseite bis fast zum Ende gelesen. Das weiß ich, dass das keine Rolle spielt

Nur, mich irretiert, dass D3DX_PI ein anderer Wert zugewiesen wird als er hinterher ausgibt. Dabei handelt es sich scheinbar nicht um einen Rundungsfehler.
Wie kann es denn sein, dass eine Konstante irgendwann einen anderen Wert besitzt als ihr zugewiesen wurde?
Das ist das was ich nicht verstehe.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 10. Mai 2006, 23:11
Fließkommazahlen sind ungenu. Da du im zehnersystem rechnest und der computer im binärsystem, kann es passiern, dass der wert nur nährungsweise in der variable steht und nicht genau. so könnte z.B 1,3 als 1,299999991324 gespeichert sein, weil er 1,3 im binärsystem nicht korrekt darstellen kann
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#7

Re: DirectX 9 - (Verständnis-)Problem mit Pi

  Alt 11. Mai 2006, 13:16
Mmh... verstehe... habe gestern auch bei einem Test gemerkt, dass es an den Fließkommazahlen liegt.

In der Delphi-Hilfe steht, dass der Typ Single 7-8 Stellen aufnehmen kann.
Die Zahl Pi beinhaltet aber 10 Stellen.
Nehme ich für D3DX_PI den Typ Double (dieser kann 15-16 Stellen aufnehmen) wird Pi korrekt dargestellt.
Allerdings bringt mir das nicht viel, denn rechne ich sowie die Units von DirectX anschließend mit Single weiter so wird das Ergebnis wieder nicht korrekt.

Bei einem Kreis, selbst wenn er größer ist, spielt es keine Rolle ob 7 oder 8 Stellen nach dem Komma ungenau sind.
Aber ob es auch keine Rolle spielt wenn ich eine Karte mit (X, Y) = 1000 x 1000 Punkten habe und sich dabei bei jedem Pixel der Wert um 0,000000087 vergrößert... ok, das wären es selbst bei 1000 Punkten nur eine Verschiebung um 0,000087 Punkten. Also werde ich das so hinnehmen.

Vielen Dank für die Hilfe!

Gruß, Robert
  Mit Zitat antworten Zitat
Antwort Antwort


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:13 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