-         

Ergebnis 1 bis 10 von 10

Thema: Geschickt runden

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36

    Geschickt runden

    Anzeige

    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. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    (2*10^9*111320) / 10^7 = 2*10^2*111320

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    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.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Achso,hab mich von der 2 iritieren lassen.
    Was spräche denn gegen eine 64Bit Variable?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    Die habe ich noch nie eingesetzt, kann also nicht beurteilen, die der Wahnsinn ist
    Dann werde ich es wohl mal versuchen...
    Try and...

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Bevor ich ein float benutze, nehm ich lieber ne 64Bit Varialbe...

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Warum kein float, dann kannst du zum Runden auch floor() aus math.h benutzen.
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    Zitat Zitat von PicNick
    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 )
    Würde ich nur den Bruch berechnen, hätte ich ja 0,011132, das wäre dann 0, oder?
    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

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •