Double zahlen mit mehr Nachkommastellen

Hallo

Ich möchte gerne für ein Schulprojekt mit dem Arduino einen Abstandswarner bauen.
für das muss ich mit dem Arduino zwei GPS Daten von einander Subtrahieren. Doch der Arduino ist auch mit double zahlen nur auf 6 Nachkommastellen genau ich bräuchte aber 14 Nachkommastellen.
Kann mir wer einen Tipp geben wie ich das genauer hinbekomme?

Da musst Du einen 32-Bit Typ verwenden, der echte double mit 8 Byte benutzt.

Gruß Tommy

auf 6 Stellen genau , da wirst Du einen anderen Prozessor benötigen.
Heinz

Auf den kleinen (8 Bit) Arduinos ist float=double, und ich halte es für unwahrscheinlich daß es eine Bibliothek für lange Gleitkommazahlen in Sofware gibt. Am besten nimmst Du dafür einen 32 Bit Controller, der hat meist eine FPU und 64 Bit double.

14 NK sind sportlich, warum auch immer Du die brauchst.
Du musst die ja irgendwo her bekommen.

Dann rechne mit Ganzzahlen.
Die Ausgangszahl wird 7 NK haben.
Also die Ausgangszahlen mit 10000000 multiplizieren.
Aus 52°31' wird dann 523.100.000.
Ein unsigned long kann 4.294.967.295 aufnehmen.

Jetzt müsste bekannt sein, was Du mit 14NK machen willst um das weiter zu spinnen.

Ich bezweifle, dass "14 Nachkommatellen" bei der Genauigkeit von herkömmlichen GPS Empfängern für Bastler Sinn machen.

in welcher Form liegen die GPS Daten vor? D.h. was steht aktuell in deinen wie definierten Variablen?
Woher bekommst du diese?
Nach welcher Annäherungsformel berechnest du den Abstand der beiden Koordinaten?
Mach ein Musterberechnung und stell sie hier ein.

Du solltest garnicht erst mit float arbeiten! Wenn du den ganzzahligen grad-Anteil vorher entfernst, ist die Differenz (auch als float) übrigens genau genug für normales GPS.

1° sind definitionsgemäß 60 seemeilen, also ca. 100km. 10^-6 ergibt also 10 cm. Wenn das nicht genau genug ist, würde mich interessieren, was für ein GPS System du verwendest.

Wenn auch @my_xy_projekt's Umrechnung 52°31' zu 523.100.000 etwas merkwürdig ist, ist sein Vorschlag mit 32 bit long schon richtig.

Das stimmt mit den 7NKstellen ist es genau genug. war nur mal ne frage ob es irgendwie möglich ist das umzuwandeln da ich ja vor dem Komma maximal 3 stellen habe.

der Fehler in meinen Formel war das die erde eine Kugel ist und kein Zylinder -.-.

also kam meine Ungenauikeit von da und nicht von den Nachkommastellen.

Auch wenn es nicht mehr wichtig ist....

Die neueren AVR Gcc (ab 10?) können schon auch mit double rechnen.
Dazu ist ein Compilerschalter zu betätigen.
Leider gibts dazu keine Ausgabe Routinen, da ist Eigenbau angesagt.

#include <Streaming.h> // die Lib findest du selber ;-)
Print &cout = Serial; // cout Emulation für "Arme"


/*
 
 avr-gcc-11.1.0 mit  -mdouble=64

 Ausgabe: 
  sizeof(float): 4
  sizeof(double): 8

 */
void setup() 
{
  Serial.begin(9600);
  cout << F("Start: ") << F(__FILE__) << endl;
  cout << F("sizeof(float): ") << sizeof(float) << endl;
  cout << F("sizeof(double): ") << sizeof(double) << endl;
}

void loop() 
{

}

Es gibt noch die Bibliothek Bignumber.
GitHub - nickgammon/BigNumber: BigNumber library for the Arduino nd
https://www.gammon.com.au/forum/?id=11519
Da ist die Anzahl der Kommastellen nur durch das RAM begrenzt.

Grüße Uwe

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.