Текущий архив: 2004.12.05;
Скачать: CL | DM;
Внизsin, cos, etc. Найти похожие ветки
← →
123 © (2004-11-16 01:45) [0]Как в процессоре реализовано вычисление тригонометрич. ф-ций?
← →
Marser © (2004-11-16 01:48) [1]Никак. Это реализуется в сопроцессоре. Скорее всего, используется разложение в ряд.
← →
123 © (2004-11-16 01:58) [2]Думал сразу написать про сопроцессор, но решил ограничиться словом "процессор", нет же..
Поправлюсь: как сопроцессор вычисляет тригонометр. ф-ции?
Какие различия реализации у разных производителей?
Какие показатели скорости вычисления у, опять-таки, разных производителей?
← →
Andy BitOff © (2004-11-16 02:00) [3]ПРАВИЛЬНО реализовано.
← →
Alex Konshin © (2004-11-16 06:47) [4]Используются таблицы и некое вырожденное разложение в ряд. Т.е. как такового вычисления по ряду там нет. Если очень сильно повспоминаю, то может вспомню, где я видел их алгоритмы.
← →
vidiv © (2004-11-16 07:23) [5]да! былобы интересно узнать =)
← →
Jeer © (2004-11-16 10:35) [6]SinCos вроде вычисляется по алгоритму CORDIC (т.н. "метод цифра за цифрой")
Отдельные Sin и Cos - как правило, через ряды по схеие Горнера.
← →
Pentium133 © (2004-11-16 10:49) [7]Увеличится ли скорость вычисления если, напрмер заранее вычислить синусы (или косинусы) нужных углов и заполнить ими масив. А потом по мере надобности доставать значения из масива?
← →
Jeer © (2004-11-16 11:03) [8]Все зависит от задач (точности).
Есть интерполяционные методы - скорость выше.
Для грубой сетки углов сойдет чисто табличный метод.
Например, код угла идет от валкодера с дискретом 1 град.
В это случае вполне достаточно хранить таблицу из 90 значений.
← →
vidiv © (2004-11-16 11:33) [9]и всеже сопроцессор быстро считает :)
← →
wal © (2004-11-16 11:36) [10]>Pentium133 © (16.11.04 10:49) [7]
>Увеличится ли скорость вычисления если, напрмер заранее вычислить синусы (или косинусы) нужных углов.
Ну если делить углы на "нужные" и "ненужные", то можно и таблицу сделать, в любом случае "вычислить заранее" всегда быстрее, чем "считать каждый раз", но если "нужных" много, то как бы всего Брадиса загонять не пришлось. Тут извечная диллема оптимизации - либо объем приложения, либо скорость выполнения.
С уважением.
← →
Jeer © (2004-11-16 14:10) [11]vidiv © (16.11.04 11:33) [9]
>и всеже сопроцессор быстро считает :)
Это только так кажется :))
Например, известная библиотека CEPHES имела в сравнении с сопроцессором следующие показатели в относительных ед-цах
Sin_8087________ 1.0
SinCos_8087_____ 1.4
Sin_CEPHES______ 0.2
SinCos_CEPHES___ 0.5
при макс.погрешности 6E-6
← →
palva © (2004-11-16 15:13) [12]За процессор не скажу, но по науке синус вычисляется так: в диапазоне 0..pi/2 вычисляется как многочлен (т. н. многочлен наилучшего приближения) который берется из справочника. Остальные значения параметра приводятся к 0..pi/2 из соображений симметрии и периодичности. Очень большие значения (там где изменение мантиссы на единицу означает изменение числа на величину, сравнимую с периодом синуса) должно вызывать ошибочную ситуацию. Подробнее можно посмотреть отладчиком BP7, если собрать программу с эмуляцией сопроцессора.
← →
Alex Konshin © (2004-11-16 22:36) [13]Вполне достаточно таблицы 0..pi/4, остальное вычисляется. По-моему там даже еще меньший диапозон, вроде 0..pi/12. Потом я помню, что таблица используется для первого приближения, которое и так уже достаточно точное. И она как-то уточняется. Потом используются тригонометрические формулы для получения окончательного результата.
Пока не вспомнил, где я это видел. Точнее, я точно помню, что я видел описание алгоритма для больших машин ЕС ЭВМ, но где-то я также встречал подобное описание и для PC.
Страницы: 1 вся ветка
Текущий архив: 2004.12.05;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c