現在我做如下:我怎麼能提高精度,無漂浮Ç
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;
最終結果是:
40*10 = 400
400/6 = 66
66*20 = 1320
1320/100 = 13
13*414 = 5382
我很想與此類似:
4/60 = 0,0667 * 20 * 4188 * 0,998 = 5576 (more accurate).
如何在不使用float
s或double
s的情況下做到這一點更準確,最重要的是 不會增加我的代碼太多。
親切的問候 Sonite
因爲我有一個uint24_t我想我會只是增加ManualFlow * 10 * Manualflow 100。這將使它更準確。我可以有 最大的值是:「1000」 * 10/6 *「100」/100 * 414 = 689724 – Christian 2012-04-03 09:12:00
你在那裏浪費位......如果你有一個uint8_t和uint24_t,這意味着你可以左移的uint8_t乘以16位。這比乘以100大約多600倍,並且再快一點,與位移相比,乘法運算非常昂貴。 – 2012-04-03 10:18:40