のない精度を高めることができる今、私は次のようにやっている:は、どのように私は山車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;
最終結果:私は大好きだ何
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
またはdouble
を使用せずに、これをより正確に行うにはどうすればよいでしょうか。最も重要なのはですコードサイズを大きくしすぎることはありません。
種類よろしく Sonite
私はuint24_tを持っているので、ManualFlow * 10をManualflow * 100に増やすことになります。それははるかに正確になります。 "1000" * 10/6 * "100"/100 * 414 = 689724 – Christian
あなたはそこにビットを無駄にしています...あなたがuint8_tとuint24_tを持っているなら、 uint8_tを16ビットだけ増やします。これは100倍に比べて約600倍正確で、ビットシフトに比べてはるかに高速ですが、乗算は非常に高価です。 –