JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c6454bd73a86a0b504ba662a0857881dMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Dickes fettes DOUBLE/FLOAT-Problem!
Gehe zu Seite 1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
SK
Mini JLI'ler


Alter: 36
Anmeldedatum: 11.06.2005
Beiträge: 20

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:15    Titel: Dickes fettes DOUBLE/FLOAT-Problem! Antworten mit Zitat

Moinsen!
Das Prob, das ich hab, ist sehr sehr merkwürdig und aufwendig zu beschreiben, ohne gleich mit Tipps, wie "du hast da ma 'float' anstatt 'double' verwendet", zubekommen.

Ich hab versucht ein Gleichungssystem zu lösen. Verschiedene Lösungen als DOS-Prog geschrieben. Danach in das eigentliche Prog kopiert (hab genau so konzipiert, dass ich kein Zeichen ändern musste). Als dann der Test kam, stürzte das Prog ab. Nach geschaut. Im Gleichungssystem entstand an entscheidener Stelle 0. Genau Null. Wirklich genau Null. Dann Gleichungssystem mit Taschenrechner und dem Prog im DOS-Prog gelöst. Es ging. Shocked ??????????????????????????? Question

Test gemacht: Einfach eine Zahl berechen lassen. 1 : 19800 = 5,0505050505051e-5 (mit dem (Windows-)Taschenrechner) Das Programm, in dem das Gleichungssystem nicht lösbar war, ließ ich das auch berechnen. Dort kam aber 5.0505052058725e-005 raus. Mad

Das Problem wärs ja nicht wenns die Stellen weit nachm Komma wärn, aber das das zu einer (genauen) NULL führt, raff ich ne.

Gut weiter. Danach hab ich bestimmte Header, Klassen und ähnliches aus den Prog entfernt. Reduziert auf ein winziges, funktionierte die Double-Genauigkeit (das Gleichungssystem auch) wieder. Prob is nur, dass das, was den Fehler verursacht (oder zu mindestens, wenn ichs eingebunden hab, der Fehler da ist), ist die Grafik-Ausgabe mit Hilfe von Direct3D 9 Sad
Und noch eine Komponente, dass aber nichts mit DirectX zu tun hat.

WIE KANN DAS SEIN??? DARF DAS ÜBERHAUPT SEIN??? Kann man durchbestimmte libs, header o.ä. die Standert-Typen beeinflussen (unwahrscheinlich). Un verallem wie krieg ich das weg? Hats was mit der Hardware zu tun (war aber auf jeden rechner war das bis jetzt)?

Ich bedanke mich im Voraus.
SK

PS: gruß homeless punkdrummer (ich werds dir auch noch zeigen, wenn ich zeit ab, im moment is schlacht)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:26    Titel: Re: Dickes fettes DOUBLE/FLOAT-Problem!!!!!!!!!!!!!!!!!!!!!! Antworten mit Zitat

SK hat Folgendes geschrieben:
WIE KANN DAS SEIN??? DARF DAS ÜBERHAUPT SEIN???
Kann sein, darf sein, muss so sein!

SK hat Folgendes geschrieben:
Kann man durchbestimmte libs, header o.ä. die Standert-Typen beeinflussen (unwahrscheinlich)

Ja, die Standardtypen können durch Redefinitionen beeinflusst werden und ein Undefiniertes Verhalten hervorrufen.

SK hat Folgendes geschrieben:
Un verallem wie krieg ich das weg? Hats was mit der
Na ja, bei so einer "geringen" Problembeschreibung hilft nur eines: Zeig uns die Stelle wo das Programm Abstürzt +-20 Zeilen. Der Debugger hilft Dir diese Position genau zu finden.

SK hat Folgendes geschrieben:
Hats was mit der Hardware zu tun (war aber auf jeden rechner war das bis jetzt)?
Interessante Theorie! Wir legen ein mit Marmelade beschmiertes Toastbrot auf den Tisch und schupsen es runter, es fällt vom Tisch und landet genau mit der Marmeladenseite zum Boden. Wen geben wir die Schuld? Murphy oder der Masse der Erde, oder sogar den Zeugen Jehovas? Fragen über Fragen Wink

Nein im Ernst: Das wäre das Unwahrscheinlichste was es gäbe, das grenzt sogar schon an dem Unmöglichen.

Und ohne Aufdringlich oder Unhöflich zu sein (ich glaube meine Art ist bekannt und das ich es auch nicht so extrem meine...) solltest Du Dir dies hier nahelegen: http://www.lugbz.org/documents/smart-questions_de.html

Damit kann ich bzw. alle anderen hier Dir viel schneller und effizienter Helfen.

- Patrick
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 11.06.2005, 20:31    Titel: Antworten mit Zitat

In C muss man darauf achten das Ganzzahldivisionen eine Ganzzahl zurückgeben (stark vereinfacht):

1/3=0
1/3.0f=0.33 (float)
1/3.0=0.33333333 (double)

Nehme dir Patricks Tips trotzdem zu herzen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:33    Titel: Antworten mit Zitat

DirectXer
Was stimmt denn mit meinem Deutsch nicht?

FallenAngle84
Exakt! Aber bei dieser Problembeschreibung geht das nicht so leicht einen passablen Lösungsweg zu finden.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:44    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
DirectXer
Was stimmt denn mit meinem Deutsch nicht?

FallenAngle84
Exakt! Aber bei dieser Problembeschreibung geht das nicht so leicht einen passablen Lösungsweg zu finden.


Sry, aber wieso DirectX???
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:58    Titel: Antworten mit Zitat

hat sich wohl vertan und seinen Psot gelöscht Wink

Achja, bitte übertreibst nicht so mit den Ausrufezeichen. Ich weiß du denkst deine Frage wäre ganz besonders wichtig, das denk aber jeder hier. Also lass es einfach sein.
Ich habe mir mal erlaubt einige zu entfernen...
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
SK
Mini JLI'ler


Alter: 36
Anmeldedatum: 11.06.2005
Beiträge: 20

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:02    Titel: Antworten mit Zitat

Toll Patrick danke für dein Entgegenkommen. Hilft
mir nur net weil

sx = 1;
sy = 1;
sz = 1;
Dichte = 19800;

Masse = sx * sy * sz * Dichte;
s.MasseInvers = 1 / Masse;


unhabhängig von anderen code-Zeilen is.
in s.MasseInvers is nu
5.0505052058725e-005
drin un net
5,0505050505051e-5 wies sein müsste.

Könntest du das mit den Redefinitionen bissl gnauer erläuertern.
Thanks
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:15    Titel: Antworten mit Zitat

SK
Och mein Komment hätte Dir eigentlich schon helfen können Wink

1. Ordentlich casten
2. Für eine Ausgabe die Präzision höhersetzen! (Grund: Siehe Topic über das Runden in C++)
3. Irgendetwas Very Happy

CPP:
#include <iostream>
#include <iomanip>

const int sx = 1;
const int sy = 1;
const int sz = 1;
const int weight = 19800;

const double invMass = 1.0 / static_cast<double>(sx * sy * sz * weight);

int main (void)
{
    std::cout << std::setprecision(20) << invMass << std::endl;

    std::cin.get();

    return 0;
}


Output: 5.050505050505050505051e-5

- Patrick

edit: Das mit der Redefinition, wird momentan nicht Dein Problem darstellen Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:22    Titel: Antworten mit Zitat

*räusper* ehh, ich wollte erst was schreiben; habs mir dann aber och anders überlegt... ich kenn dich ja. Rolling Eyes

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:24    Titel: Antworten mit Zitat

DirectXer
Komm put put, spucks aus Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SK
Mini JLI'ler


Alter: 36
Anmeldedatum: 11.06.2005
Beiträge: 20

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:28    Titel: Antworten mit Zitat

OK vlei habsch mie da noch n bissl zu undeutlich ausgedrückt:

Da is kein 'int' und auch kein 'float'. Nur 'double'. Und die Ausgabe regel ich übers Überwachungsfenster im Debug-Mod; weil ich die Werte eigentlich garne wissen wil. Die müssen bloß stimmen. Und dat tun se net.

Und noch ma: der Fehler tritt nur auf wenn ich n bestimmte Komponente ins Programm einbaue, die aber rein gar nix mit dieser Berechnung zu tun ham.

(Hab ich das wirklich so dumm formuliert, dass das keiner gerafft hat.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:29    Titel: Re: Dickes fettes DOUBLE/FLOAT-Problem!!!!!!!!!!!!!!!!!!!!!! Antworten mit Zitat

OK, ihr wolltet ja net anders... Cool
Patrick hat Folgendes geschrieben:
SK hat Folgendes geschrieben:
WIE KANN DAS SEIN??? DARF DAS ÜBERHAUPT SEIN???
Kann sein, darf sein, muss so sein!

SK hat Folgendes geschrieben:
Kann man durchbestimmte libs, header o.ä. die Standert-Typen beeinflussen (unwahrscheinlich)

Ja, die Standardtypen können durch Redefinitionen beeinflusst werden und ein Undefiniertes Verhalten hervorrufen.

SK hat Folgendes geschrieben:
Un verallem wie krieg ich das weg? Hats was mit der
Na ja, bei so einer "geringen" Problembeschreibung hilft nur eines: Zeig uns die Stelle wo das Programm [/b]Abstürzt +-20 Zeilen. Der Debugger hilft Dir diese Position genau zu finden.

SK hat Folgendes geschrieben:
Hats was mit der Hardware zu tun (war aber auf jeden rechner war das bis jetzt)?
Interessante Theorie! Wir legen ein mit Marmelade beschmiertes Toastbrot auf den Tisch und schupsen es runter, es fällt vom Tisch und landet genau mit der Marmeladenseite zu[b]m Boden. Wen geben wir die Schuld? Murphy oder der Masse der Erde, oder sogar den Zeugen Jehovas? Fragen über Fragen Wink

Nein im Ernst: Das wäre das Unwahrscheinlichste was es gäbe, das grenzt sogar schon an dem Unmöglichen.

Und ohne Aufdringlich oder Unhöflich zu sein (ich glaube meine Art ist bekannt und das ich es auch nicht so extrem meine...) solltest Du Dir dies hier nahelegen: http://www.lugbz.org/documents/smart-questions_de.html

Damit kann ich bzw. alle anderen hier Dir viel schneller und effizienter Helfen.

- Patrick


so, das wars. Meinte die Groß- und Kleinschreibung. Hab den Post aber dann wieder gelöscht, weil 1. mir sowas auch immer passiert und 2. ich das für sinnloses OT-Gequatsche hielt...

Naja, wie dem auch sei, Gruß DirectXer Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:31    Titel: Antworten mit Zitat

SK
Where is the problem? Nein, mal im ernst: Das Debug-Window hat eine nicht so hohe Präzision und die Debugversion ebenfalls nicht. Deshalb vertrau mehr diesem Output:
CPP:
#include <iostream>
#include <iomanip>

const double sx = 1.0;
const double sy = 1.0;
const double sz = 1.0;
const double Dichte = 19800.0;

const double MasseInvers = 1.0 / (sx * sy * sz * Dichte);

int main (void)
{
    std::cout << std::setprecision(20) << MasseInvers << std::endl;

    std::cin.get();

    return 0;
}


Und wenn Du mit double bzw. float rechnest: .0 bzw. .0f nicht vergessen! Sonst hat man ints.

- Patrick

DirectXer
Du willst mir irgendetwas sagen, doch ich weiß grade nicht was. *kratz*
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:36    Titel: Antworten mit Zitat

dann les dir den Quote, den ich von deinem Text geschrieben hab, nochmal durch; und achte auf fettgedruckte Stellen. Ich hab alle kleinen Fehler so makiert Very Happy

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 21:39    Titel: Antworten mit Zitat

DirectXer
*kratz und überleg ob evtl. doch etwas Kaffee helfen würde, da ich grade nicht weiß was DirectXer mir sagen will*
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3, 4  Weiter
Seite 1 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum