Moin,
bisher habe ich es immer vermieden mit float und double zu arbeiten,
weil es mir unheimlich ist. Da ich nun aber auch sin + cos verwenden
muss, komme ich nicht drumherum.
Nun habe ich auch schon das erste Problem. Ich habe drei Werte in
uint16_t und ich benötige jeweils drei double Werte im Bereich von 0..1,
die das Verhältnis wiederspiegeln. Also habe ich es wie folgt versucht
zu lösen. (Vereinfachtes Beispiel)
Prozessor: ARM Cortex M3 (STM32F103)
Compiler: ARM Yagarto
1 | uint16_t a = 1054;
|
2 | uint16_t b = 84;
|
3 | uint16_t c = 1403;
|
4 |
|
5 | double all = a + b + c;
|
6 | double a_ = (double)a / all;
|
7 | double b_ = (double)b / all;
|
8 | double c_ = (double)c / all;
|
Hier ist mir aufgefallen, dass der b Anteil viel zu groß erscheint. Also
habe ich mir mal die konvertierten Zahlen ausgegeben:
1 | uint16_t a = 1054; // Nach (double)a steht hier 2048 drin
|
2 | uint16_t b = 84; // Nach (double)b steht hier 855 drin
|
3 | uint16_t c = 1403; // Nach (double)c steht hier 2048 drin
|
Kann das sein?! - So schlecht kann man doch gar nicht auf / abrunden bei
der Typkonvertierung.
Was mache ich falsch?
Vielen Dank für eure Unterstützung.