Т.е. не пойму: (0xc0200000) / 65535 = 0xfffffffe; (0xc0200000) >> 16 = 0xfffffffd; ???? Как правильно отрицательные числа делить при помощи сдвига на число кратное ^ 2 ??
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
гоша
29 мая 2004 г. 21:53
В ответ на:
С прошлой стр Как лучше реализовать Как лучше выполнить {c= (int32 a * int32 b) >> 16;} чтобы исключить возможные переполнения при умножении? Также чтобы еще работало и для отрицательных чисел??
отправлено гоша 29 мая 2004 г. 21:34
Составить ответ
|||
Конференция
|||
Архив
Ответы
Компилятор GCC делает это корректно, мне как-то приводили пример. Только, к сожалению, я алгоритм не запомнил.
—
Bill
(30.05.2004 08:17, 74 байт)
Извините, сглючил. 0xff78000 >> 16 == 0xffffff78; 0xff780000/65536==0xffffff79; Но, как я понял для дополнительного кода коррекции не нужны?
—
гоша
(30.05.2004 10:42, 2124 байт)
Хм... Попробуйте заменить операцию деления на сдвиг вправо: -1/2 или -1>>1 Что будет в каждом случае?
—
Bill
(30.05.2004 14:24,
пустое
)
может вначале их сделать положительными, разделить и результату вернуть правильный знак?
—
Пушистик
(29.05.2004 21:56,
пустое
)
Не издевайтесь, так вроде- бы работает... Но почему необх +1?
—
гоша
(29.05.2004 22:05, 454 байт)
и в мыслях не было ни над кем издеваться
—
Пушистик
(29.05.2004 22:14, 332 байт,
ссылка
)
кроме того Вы именно так и сделали - взяли модуль этих чисел
—
Пушистик
(29.05.2004 22:17,
пустое
)
Тогда не в d кодах а так?? - как- нибудь проще для mk с АЛУ с аппаратным 16x16 умножением??
—
гоша
(30.05.2004 10:17, 1393 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru