Hallo,

die 16 ist "korrekt": (600 * 1000) / 600 = 600.000 / 600 -> 16 Bit: 10.176 / 600 = 16

Folgende Varianten sollten funktionieren:

Code:
wa_numerator += ((uint32_t) line_values[i]) * (i+1) * 1000;

oder

wa_numerator += line_values[i] * (i+1) * 1000UL;
Wichtig ist, dass der Compiler erkennt, dass er auf der rechten Seite in "uint32_t" rechnen soll. Nebenbei, "itoa(...)" passt nicht zu einem "uint", dafür gibt es "utoa(...)".


Carry