Im Moment habe ich wie folgt mache:wie kann ich erhöhen Genauigkeit ohne Schwimmer C
uint8_t ManualFlow = 40; // 0 -> 255 Unsigned Char
uint24_t ME; // 0 -> 16777215 Unsigned Short Long
ME = (uint24_t) ManualFlow*10; // Have to make this hack otherwise malfunction in calculation
ME /= 6;
ME *= (80 - 60);
ME /= 100;
ME *= 414;
Das Endergebnis:
40*10 = 400
400/6 = 66
66*20 = 1320
1320/100 = 13
13*414 = 5382
Was ich liebe würde, ist ähnlich wie diese:
4/60 = 0,0667 * 20 * 4188 * 0,998 = 5576 (more accurate).
Wie kann ich das genauer ohne Verwendung von float
s oder double
s, und am wichtigsten nicht meine Code-Größe zu sehr erhöhen.
Mit freundlichen Grüßen Sonite
Da ich ein uint24_t habe, werde ich ManualFlow * 10 auf Manualflow * 100 erhöhen. Das wird es viel genauer machen. Größte Werte, die ich haben kann sind: "1000" * 10/6 * "100"/100 * 414 = 689724 – Christian
Sie verschwenden Bits dort ... Wenn Sie ein uint8_t und uint24_t haben, bedeutet es, dass Sie nach links verschieben können uint8_t um 16 Bits. Das ist ~ 600-mal genauer als die Multiplikation mit 100 und auch hier ist es viel schneller, Multiplikation ist im Vergleich zu Bit-Verschiebungen sehr teuer. –