Programm/Funktion rechnet nicht korrekt
-
Hjek schrieb:
bei folgendem Code ist es egal was für Zahlen die funktion zum rechnen bekommt, es kommt immer "5,03277400994827E-317" raus.
Das kann nicht sein. Ist dir klar, dass dieser Wert sehr, sehr nahe bei Null liegt? Mit welchen Werten rufst du die Funktion auf?
Allgemein ist es nicht besonders sinnvoll, Fließkommawerte auf Gleichheit oder Ungleichheit zu prüfen, weil durch die eingebaute Ungenauigkeit bestimmte Werte gar nicht darstellbar sind.
-
Morris Szyslak schrieb:
An der Funktion liegt es nicht. ...
Stimmen meine Ausführungen nicht? Außer bei Gleichheit von koord1 und koord4 wird doch die Schleife frühzeitig verlassen?!
Die wichtigste Frage ist doch erstmal: Was soll die Funktion eigentlich machen?!
-
Kolumbus schrieb:
Stimmen meine Ausführungen nicht? Außer bei Gleichheit von koord1 und koord4 wird doch die Schleife frühzeitig verlassen?!
In der Funktion ist doch gar keine Schleife. Also gibt es auch kein "frühzeitiges" Verlassen.
-
Ach ja, wie blöd von mir... ich meine natürlich "die Funktion wird frühzeitig verlassen". Ihr wisst doch was gemeint ist - wenn 1 und 4 nicht gleich sind, kommt es nicht zum Vergleich von 2 und 5 bzw 3 und 6... Schleife / Funktion ist doch egal - return beendet das Ganze!
-
Kolumbus schrieb:
wenn 1 und 4 nicht gleich sind, kommt es nicht zum Vergleich von 2 und 5 bzw 3 und 6... Schleife / Funktion ist doch egal - return beendet das Ganze!
Richtig. Aber das ist vermutlich auch beabsichtigt. Ich denke, das ist wie bei einer Sortierung nach mehreren Kriterien. Wenn schon das Hauptsortierungskriterium unterschiedlich ist, braucht man die anderen nicht mehr zu prüfen.
-
MFK schrieb:
... Wenn schon das Hauptsortierungskriterium unterschiedlich ist, braucht man die anderen nicht mehr zu prüfen. ...
Die Funktion ist meiner Meinung nach anders gedacht. Deswegen lass uns erstmal auf die Antwort vom Verfasser Hjek warten, was er eigentlich erreichen will.
Edit: @MFK: was vermutest Du über den Sinn der Funktion?
-
MFK hat Recht das ist beabsichtigt.
Das ganze hat was mit dem Browsergame OGame zu tun undzwar soll die Entfernung von Planeten ausgerehcnet werden durch die Koordinaten. Es gibt zwar schon Rechner aber ich mach mir sowas gerne selbst
Werte die ich zum testen benutze:
koord1=1; koord2=1; koord3=1; koord4=2; koord5=1; koord6=1;Die Formel ist von hier:
http://www.owiki.de/Entfernung
-
Hjek schrieb:
Werte die ich zum testen benutze:
koord1=1; koord2=1; koord3=1; koord4=2; koord5=1; koord6=1;Folgendes Programm, mit deiner Funktion, gibt 20000 aus, wie es sein sollte:
int main() { std::cout << Entfp( 1, 1, 1, 2, 1, 1 ); }Wie kommst du auf deinen Wert?
-
Die Entfernungen scheinen hier alles ints zu sein, also nimm die doch, dann hast du da keine Probleme mehr.
Du kannst übrigens deinen Code noch etwas vereinfachen.
ausif(koord1 != koord4) { if(koord1 > koord4) return (koord1-koord4)*20000; else return (koord4-koord1)*20000; }kannst du das hier machen
if(koord1 != koord4) { return abs(koord1-koord4)*20000; }
-
Danke

-
Gu Mo,
hmm... hatte eher an ein reale Punkte im 3-dimensionalen Raum gedacht... Wär n schönes Ding für ne Wette gewesen. (1:0 für MFK
) 
MfG
-
Nur mal so nebenbei: macht es nicht eigentlich überhaupt keinen sinn doubles zu benutzen? da kommt doch eh nie was mit komma bei raus.
kann man da nich gleich long nehmen?
-
Sagte ich auch schon.

-
Oh sorry hab ich überlesen ^^
-
Was sind den das für komische Koordinaten? Ich meine wieso gibst du 6 rein und in der Rechnung sind dann nur 2 davon interessant? Habe ja jetzt irgendwie nicht den genauen durchblick wie OGame da rechnet aber fände es dann doch irgendwie interessant was es damit auf sich hat.
Ah ich hab mir das ma angeschaut. Das is einfaach so

-
Na kann ja sein das einer auf 1:1:1 der andere auf 1:1:2 ist oder 1:1:1 und 1:2:1 das ist ne größere entfernung (Galaxie:Sonnensystem:Position im system 1-15)
da brauch man ne andere Rechnung^^