|
Тема |
Отг: Битовете, битовете! [re: svetlin] |
|
Автор | OldAss_anon_anon (Нерегистриран) | |
Публикувано | 20.12.00 09:10 |
|
|
Не ти трябва нито изваждане, нито деление, да не говорим за дебъгери и компилатори. Стига ти събиране с пренос, шифт и двоична аритметика с фиксирана запетая.
Делението на 900 го представяш като умножение по 1/900 = 0.001(1). А числото 0.001(1) можеш да представиш като умножение по 73 и деление на 65536 например. Иначе казано, (2000+х) * х * 73 / 655636 Понеже говорим за целочислен резултат, деленето на 65536 означава просто да махнем младшите 2 байта на делимото. Да видим сега какво стана: 1. (2000+x) * x при x<2000 се събира в 3 байта. 2. Правим двубайтово събиране x + 2000 Резултатът е в 2 байта. 3. Умножавамe резултата по x (16 бита * 16 бита) Резултатът се събира в 3 байта, като ако не ти трябва супер точност, още тук правиш едно делене на 256, т.е. младшият байт от трите все едно го няма. Значи имаме пак резултат в 2 байта. 4. Сега правим умножение по 73 (16 бита * 8 бита). Пак имаме трибайтов резултат, на който младшият байт не ни трябва (защото трябаше да делим още един път на 256). 5. Честито! Ако тази точност не ти е достатъчна, трябва да вдигнеш разрядността. Ако не знаеш как се умножават цели числа, обади се пак. Поздрави OldAss
|
| |
|
|
|