Hallo
ich möchte auf meinem AVR folgende Rechnung durchführen.
Code:
uint16_t line_estimate = 0;
uint32_t wa_numerator = 0;
uint16_t wa_denominator = 0;
uint16_t line_values[8]; //Werte zwischen 0...1023
[...] //line values werden eingelesen und befüllt
for(uint8_t i=0;i<8;i++)
{
wa_numerator += line_values[i] * (i+1) *1000;
wa_denominator += line_values[i];
}
line_estimate = wa_numerator/wa_denominator;
//Ausgabe
char buffer[20];
lcd_puts(itoa(line_estimate, buffer, 10));
Allerdings funktioniert das nicht richtig. Wenn z.b alle Elemente von line_values 0 sind und nur das 1 einen anderen Wert hat müsste line_estimate 1000 sein, es schwankt aber nur "wild" hin und her und erreicht zeitweise negative bzw. Werte kleiner 1000 die es niemals erreichen dürfte. Meine Vermutung ist das ich noch irgendwo "typecasten" muss, ich weiss aber nicht wo
Hat irgendjemand eine Erklärung für dieses seltsame Verhalten bzw. kann mir sagen wo der Fehler liegt?
Lesezeichen