b=b+((a-b)>>5); и b=(b<<5+b+a)>>5; во втором случае точность выше? или я не прав?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
fgggk
20 декабря 2004 г. 19:07
Составить ответ
|||
Конференция
|||
Архив
Ответы
Эффективнее по тактам b+((a-b)>>5)+перенос_от(a-b)>>5).
—
SM
(20.12.2004 20:59,
пустое
)
Переноса не будет :)
—
Миша
(20.12.2004 21:26,
пустое
)
Это еще с чего? (+)
—
SM
(20.12.2004 21:37, 192 байт)
Ну, блин и сказал, не - показал 8-)) А что это за кружочек черненький перед переносом стоит ? Он чо такое означает ?
—
Kuka
(21.12.2004 15:05,
пустое
)
Ответ: Одинаково. У b из дробной части перенос никогда не придет, бо нули там.
—
Миша
(20.12.2004 19:26,
пустое
)
прошу прощения, ошибся b=b+((a-b)>>5); и b=(b<<5-b+a)>>5;
—
fgggk
(20.12.2004 19:21,
пустое
)
Сначала все + и *, потом все - и /, все правильно. Только знаки не путайте :)
—
netaimaid
(20.12.2004 19:18,
пустое
)
Не знаю как насчет точности, но результаты при замене вычитания сложением будут разными :)
—
rezident
(20.12.2004 19:16,
пустое
)
((b<<5) - b + a + 16) >> 5 так точнее
—
ы
(20.12.2004 19:15,
пустое
)
ну или так b=b+((a - b + 16)>>5); все ж понятнее
—
ы
(20.12.2004 19:29,
пустое
)
и напосля)) b +=(a - b + 16) >> 5;
—
ы
(20.12.2004 19:31,
пустое
)
короче, при целочисленном делении (+)
—
ы
(20.12.2004 19:18, 133 байт)
Поэтому и >>5, а IAR C AVR, как делит, округляет или отбрасывает
—
fgggk
(20.12.2004 19:23,
пустое
)
ни разу не встречал чтобы при целых числах сам округлял...так что скорре всего и иар просто отбрасывает
—
ы
(20.12.2004 19:24,
пустое
)
ну и разрядность побольше чтобы overflow не було
—
ы
(20.12.2004 19:21,
пустое
)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru