![]() |
|
![]() ![]() ![]() |
|
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Один чел на форуме про J2ME спрашивал как рассчитать arccos, arcsin, ln и тд. т.к. их нет в классе Math. Я тоже задумался над этим вопросом
![]() ![]() ![]() ![]() Так вот, как же сёйчас производят вычисления cos, sin... и др. функций. Как это делают современные калькуляторы? Как это реализовано в процессоре? ![]() Неужели ряды используют до сих пор? Если так, то кто-нибудь может напомнить формулу для определения заданной точности рядов? |
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Насколько я знаю в нормальных библиотеках строится таблица значений для sin/cos... для определенных аргументов(с достаточно маленьким шагом). При вычислении значения смотрится есть ли значение в таблице для такого аргумента, или для аргумента, sin/cos... которого не очень сильно отличается, если не находят, то ипользуя формулы sin(a+b)/sin(a-b) и тоже для cos нуходится требуемое значение.
имхо тоже через таблицы ![]() |
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Какие таблицы??? ![]() ![]() ![]() ![]() Даже если так, то откуда взялись таблицы? |
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Что такое таблицы Брадиса не знаю
![]() Ну блин, заранее посчитали эти значения, реализовали его програмно, а затем зашили в схемы ![]() Если честно, я не особо вкурсе по поводу
|
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
В том то и дело, что я хочу узнать как они посчитали, да ещё с бешенной точностью. |
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Пардон не въехал сразу
![]()
это ты имеешь ввиду максимум 8 знаков после запятой?? ![]() Ну т.к надо посчитать один раз, то можно использовать что-угодно для вычисления этих значений. Мона посчитать через ряды дающие быструю сходимость. Какие обычно используются я не знаю, но можно просто разложить функцию в ряд Тейлора и получится некоторый ряд(но наверное сходиться он будет долго). А вычисления в ряду продолжаешь до тех пор, пока получающееся значение отличается от предыдущего на нужную тебе величину(например, если нужна точность 1.e-5, то до тех пор, пока отличия составляют 5.e-6) |
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Я так и сделал. Только вот количество итераций сильно колеблется.
Например для: x=0.3 n=5 x=0.5 n=8 x=0.7 n=16 ![]() x=0.9 n=51 ![]() x=0.999 n=3311 ![]() x=0.9999 n=23363 ![]() ![]() ![]() Как же процессор махом вычисляет значения с точностью double? ![]() Это сообщение отредактировал(а) Vadim999 - 8.4.2005, 23:29 |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
Вот что я нарыл после непродолжительного гугления: CORDIC и еще о том же
COordinate ROtation Digital Computer Суть метода: Поворот вектора (1, 0) на угол fi, чтобы вычислить sin(fi) и cos(fi) Поворот сводится к операциям сложения и сдвига N итераций для точности N бит Вот пример кода вычисления синуса и косинуса с точностью 12 бит (чуть хуже 4 знаков после запятой):
Не берусь утверждать, что в процессорах используется именно этот алгоритм, но похоже на то. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Реальный метод!
![]() |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
В документе, на который я дал ссылку, коротко описывается, как получить арктангенс. Кстати, вот еще подтверждение тому, что именно этот метод используется в аппаратных реализациях - в наборе инструкций x87 из обратных тригонометрических функций только арктангенс.
Вообще, Google дал массу ссылок, например: FAQ по CORDIC и др. Это сообщение отредактировал(а) Void - 10.4.2005, 11:27 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |