Hallo,
ich habe ein Problem mit einer Rechnung.
Ich möchte eine Tabelle mit konstanten Faktoren am Anfang des Programms
errechnen lassen.
ssTabelle wird anfangs mit Werten befüllt (hier 4 Stück als Beispiel),
die das Programm dann später ausrechnen soll.
Die Array hierfür ist als int16_t definiert, da die Anfangsbefüllung und
auch die Werte NACH erfolgter Rechnung in ein int16_t passen.
Jetzt kommt es aber bei der Rechnung selbst zu einem Überlauf von
16-bit, da die Werte zunächst mit 4000 multipliziert werden (damit
größer als 16-bit) und im Anschluss durch (n*3) geteilt werden. Wird
durch n*3 geteilt, passen die Zahlen wieder 16-bit.
Allerdings funktioniert das Ganze leider nicht. Es kommt nicht die Zahl
raus, die rauskommen soll (gebe sie mir auf dem Display aus).
1 | #define AnzahlFaktoren 400
|
2 |
|
3 | uint16_t n;
|
4 | int16_t ssTabelle [AnzahlFaktoren] = {0,112,114,0};
|
5 | for (n=10; n<AnzahlFaktoren; n++){
|
6 | ssTabelle[n] = (int32_t)(4000*ssTabelle[n])/(n*3);
|
7 | }
|
Hat jemand einen Lösungsvorschlag?
Wenn ich ssTabelle als int32_t wähle, funktioniert die Rechnung. Wollte
aber nicht den Speicherplatz vergeuden.
Danke.