Dann liefere doch mal ein konkretes Beispiel. Was steht in line_values und was kommt als Ergebnis raus?
Dann liefere doch mal ein konkretes Beispiel. Was steht in line_values und was kommt als Ergebnis raus?
MfG
Stefan
line_values[0] ist 600 die anderen sind 0.
Das Ergebnis ändert sich jedoch ständig (Abstand zwischen den Messungen ist ca. 100ms)
Offensichtlich wird das Ergebnis ständig dividiert und der Divisior wird proportional kleiner (siehe angehängte Grafik)
00016
00016
00016
00016
00016
00016
00016
00016
00016
00016
...(16 blieb anfangs ziemlich lange)
02412
01061
00684
00507
00405
00337
00290
00255
00228
00206
00188
00174
00161
00151
00142
00134
00127
00121
00115
00110
00106
00102
00098
00094
00091
00088
00086
00083
00081
00079
00077
00075
00073
00071
00070
00068
00067
00066
00064
00063
00062
00061
00060
00059
00058
00057
00056
00055
00054
00054
00053
00052
00052
00051
00050
00050
00049
00049
00048
00047
00047
00046
00046
00046
00045
00045
00044
00044
00043
00043
00043
00042
00042
00042
00041
00041
00041
00040
00040
00040
00039
00039
00039
00039
00038
00038
00038
00038
00037
00037
00037
00037
00036
00036
00036
00036
00036
00035
00035
00035
00035
00035
00034
00034
00034
00034
00034
00034
00033
06794
02412
01471
01061
00831
00684
00582
00507
00450
00405
00368
00337
00312
00290
00271
00255
00240
00228
00216
00206
00197
00188
00181
00174
00167
00161
00156
00151
00146
00142
00138
00134
00130
00127
00124
00121
00118
00115
00113
00110
00108
Und mit welcher Code-Variante sind diese Ergebnisse nun entstanden? Die 16 passt jedenfalls genau zu einer "Überlauf-Version".
Und hast du mal kontrolliert, ob die Ausgangswerte überhaupt gleich bleiben? Das Ergebnis ändert sich schließlich nicht "einfach so".Das Ergebnis ändert sich jedoch ständig (Abstand zwischen den Messungen ist ca. 100ms)
MfG
Stefan
Hallo,
die 16 ist "korrekt": (600 * 1000) / 600 = 600.000 / 600 -> 16 Bit: 10.176 / 600 = 16
Folgende Varianten sollten funktionieren:
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(...)".Code:wa_numerator += ((uint32_t) line_values[i]) * (i+1) * 1000; oder wa_numerator += line_values[i] * (i+1) * 1000UL;
Carry
Hat sich erledigt... Man sollte halt nicht vergessen die Variablen nach der Berechnung zu reseten![]()
![]()
Diese Variante funktioniert jetzt:
DANKE für eure HilfeCode:wa_numerator += (long)(line_values[i]) *((i+1) * 100);![]()
EDIT: @Carry: Hab deinen Post leider erst jetzt gesehen, trotzdem danke für die Erklärung![]()
Geändert von Chypsylon (13.02.2012 um 15:27 Uhr)
Lesezeichen