(2*10^9*111320) / 10^7 = 2*10^2*111320
Hallo zusammen!
Lange konnte ich den Weg mit meinem mega324 alleine gehen und mich gut mit ihm anfreunden.
Der letzte Schritt meiner Arbeit steht kurz bevor, und ich brauche mal wieder einen Input von Euch.
Ich habe eine Längengrad-GPS-Sensorwert mit 32Bit vorliegen (int32_t).
Diesen möchte ich in Meter umrechnen, das passiert mit einer Multiplikation von 111320m. Anschließend muss ich den Wert runterskalieren, das der Längengradwert mit 10^7 skaliert ist.
In Neuseeland habe ich einen GPS-Wert von ca. 2*10^9, also knapp unter der Grenze von int32_t.
Rechne ich wie oben beschrieben
(2*10^9*111320)/10^7
habe ich ja bereits im Klammerausdruck den Bereich von int32_t verlassen.
Wenn ich vom GPS-Wert nur die ersten zwei,drei Nachkommastellen nehmen würde, wird es immernoch eng.
Lohnt es sich auf int64_t auszuweichen?
Was macht der erfahrene mueC-ler?
Liebe Grüße aus dem think-tank,
eMM
(2*10^9*111320) / 10^7 = 2*10^2*111320
Das ist rein mathematisch richtig, aber so verliere ich sieben Nachkommastellen und das ist nicht schön gerundet, oder?
Das entspräche 200 Schritte um die halbe Welt, dass das zu grob ist, ist offensichtlich.
Achso,hab mich von der 2 iritieren lassen.
Was spräche denn gegen eine 64Bit Variable?
Die habe ich noch nie eingesetzt, kann also nicht beurteilen, die der Wahnsinn ist
Dann werde ich es wohl mal versuchen...
Try and...
Kannst du nicht erst 111320 / 10^7 rechnen (0,011132)
und den 32-Bit wert dann damit multiplizieren ?
also z.B 2*10^9 * ( 111320 / 20^7 )
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Bevor ich ein float benutze, nehm ich lieber ne 64Bit Varialbe...
Warum kein float, dann kannst du zum Runden auch floor() aus math.h benutzen.
Würde ich nur den Bruch berechnen, hätte ich ja 0,011132, das wäre dann 0, oder?Zitat von PicNick
Wenn ich in der gleichen Rechnung nun noch multipliziere, wird dieser Float-Wert dann tatsächlich weitergerechnet? Weil ich hätte gesagt, dass bei der Rechnung sonst immer mit 0 multipliziert wird, weil Float<1...
Aber vielleicht habe ich einfach keine Ahnung
Das hier ist wohl eher eine Frage zum Verständnis...
Grüßle, eMM
Die GPS Berechnung sollte ja nicht so zeitkritisch sein, und der mega324 hat auch recht viel Platz. Da könnte man also ruhig 64 Bit Zahlen nehmen. Mit den 32 Bit Zahlen wird halt nie eine echte 32 Bit x 32 Bit Multipikation ausgeführt. Wenn dann ohnehin für was anderes Float Zahlen hat, kann man auch mit Float rechenen, die Auflösung ist aber geringer, sogar geringer als nur 32 Bit Integers.
Bei der Umrechnunh Längengrad in Meter muß man etwas aufpassen. Wenn man das ab dem Längengrad 0 macht, kriegt man in Neusehland oder den USA ein schiefes Koordinatensystem. Die Umrechnung von der Kugen in die Ebene geht nur gut lokal - also erstmal beim Längengrad den Bezugspukt abziehen.
Lesezeichen