Wie richtig rechnen ohne Gleitkomma?

Gast #1321659
Lesenswert?
• ▲
▼
Hallo!

Ich möchte aus einer Distanz und der Zeitdifferenz, die benötigt wird um 
die Distanz zurückzulegen die Geschwindigkeit in km/h berechen. Ich 
schaffs nicht ohne float-Variablen einen Richtigen Wert zu bekommen.

Der Angezeigte Wert entspricht eher dem in m/s statt km/h, allerdings 
auch nicht exakt.
1
  uint8_t  vmax_sec=0; // Anfang der Distanz Vm_Dist
2
  uint16_t vmax_ms=0;
3
  uint8_t  GesZ_sec=0; // Ende der Distanz Vm_Dist
4
  uint16_t GesZ_ms=0;
5
                      
6
  uint8_t Vm_Dist=5;   // Distanz in Meter
7
  uint16_t vmax=100;
8
  char c_vmax[6];
9

10
// ... Zeitmessung...
11

12
// Geschwindigkeitsberechnung:
13
vmax= (Vm_Dist*18000) / ((GesZ_sec*1000 + GesZ_ms - vmax_sec*1000 - vmax_ms)*5);
14

15
itoa(vmax,c_vmax,10);
16
lcd_gotoxy(0,3);
17
lcd_puts("Vmax: "); lcd_puts(c_vmax); lcd_puts(" km/h");


m/s = mm/ms
m/s *3,8 = m/s *18/5 = km/h, oder?

Ich habe einen Überlauf beim Rechnen befürchtet und für vmax auch schon 
uint32_t probiert.
Wie gehts richtig?
Gast
Lesenswert?
• ▲
▼
Es kann doch nicht so schwer sein ein Komma zu vermeiden. Im 
Wesentlichen
v:= (Distanz/Zeit )* (Korrekturfaktor / Skalierung)

Wobei der Korrektur ein Ganzzahlwwert ist, die Skalierung eine Division 
durch 2^N , zB div 256 oder so, was ein Schieben nach Rechts um 8 bit 
ist.

Das Ganze in 32bit, falls noetig.
Gast
Lesenswert?
• ▲
▼
Nichts ist schwer, wenn man weis wies geht. Oder zumindest nicht viel 
;-)
also z.B. statt
*18000/5
*28800/8

Die Einzelnen Summanden müssen aber nicht 32bit groß sein, oder?

ich werds Morgen ausprobieren,
besten Dank!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.