Forum: Mikrocontroller und Digitale Elektronik Wie richtig rechnen ohne Gleitkomma?


von Vielleicht Alois (Gast)


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?

von Stefan (Gast)


Lesenswert?

3,6

von Vielleicht Alois (Gast)


Lesenswert?

tippfehler

von ... (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.

von Vielleicht Alois (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!

von MichiB (Gast)


Lesenswert?

d = 19999m
t = 100s

normale int Rechunug:
v = d/t  = 1999/100 = 19 falsch (-1)

sakliert:
v = d/t  = 1999 * |2^15| / 100 = 65503232

Ergebnis. 65503232 >> 15 = 1999

von Falk B. (falk)


Lesenswert?

Siehe Festkommaarithmetik

MFG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.