temporärer Wertebereichsüberlauf - wie macht man es richtig ?


hallo,

habe mal wieder ein problem mit gemischten wertebereichen.  :o

speed wird scheinbar richtig berechnet, trotz das die konstante int übersteigt.  warum klappt das?

bei der index_vmax berechnung kommt müll raus, wenn die multiplikation int überschreitet.
die werte mit denen gerechnet wird passen aber alle jederzeit in int rein.
ich muß aber erst multiplizieren und dann dividieren wegen rundungsfehler.
muß ich alle beteiligten variablen zu long machen?
das zieht einen übelsten rattenschwanz nach sich, weil dann woanders vergleiche mit int auch geändert werden müßten.

code: [select]

unsigned long temp = t2a-t1b; // millis differenz

int speed = 169344/temp;   // aktuelle km/h, bsp. 50 km/h

// alles int, bsp. indexvsave 450 und vmax 85 = 38250
index_vmax = index_vsave * vmax / speed;   // für neue soll km/h einstellung

quote
muß ich alle beteiligten variablen zu long machen?
nein, es reicht, wenn einer der der multiplikation beteiligten ein long ist. ( oder auf long gecastet wird )
wenn du sicher bist, dass es nach der division wieder in ein int passt, kann das ergebnis natürlich gleich eine int variable sein.



Arduino Forum > International > Deutsch (Moderator: uwefed) > temporärer Wertebereichsüberlauf - wie macht man es richtig ?


arduino

Comments

Popular posts from this blog

Error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode - Raspberry Pi Forums

class MPU6050 has no member named begin

missing filename after '-o'