temporärer Wertebereichsüberlauf - wie macht man es richtig ?
hallo,
habe mal wieder ein problem mit gemischten wertebereichen.
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.
habe mal wieder ein problem mit gemischten wertebereichen.
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
Post a Comment