Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.039 c
1-1100850063
vovchik
2004-11-19 10:41
2004.12.05
Предача параметров для exe


14-1100798599
Ihor Osov'yak
2004-11-18 20:23
2004.12.05
Я в шоке...


14-1100507751
gn
2004-11-15 11:35
2004.12.05
Шпионы среди нас


1-1100667108
Progh
2004-11-17 07:51
2004.12.05
Как узнать входит ли время в интервал?


10-1068639069
val_5
2003-11-12 15:11
2004.12.05
TDataSetProvider.OnUpdateError





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский