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.