· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Вычисление SIN подручными средствами

Посл.отвђт Сообщенiе


Дата: Дек 14, 2003 16:27:54 · Поправил: emergenter

Если не использовать к волшебные но очень медленные команды СОПРОЦЕССОРА... как можно вычислить sin? (может кто-нить занимался этим!!!)


Дата: Дек 14, 2003 16:38:15

Построить табличку для некого набора углов с помошью волшебных коман и потом быстро по табличке иметь приближенное значение.


Дата: Дек 14, 2003 16:40:02

Dr.Golova
Так это уже какие-то другие волшебные команды!!!!!!!!!!


Дата: Дек 14, 2003 16:41:28

Dr.Golova
И если сразу угол не известен!!!!!!!!


Дата: Дек 14, 2003 16:44:12

ну можешь попробовать распараллелить алгоритм, и пустить его на беовульфе к примеру.


Дата: Дек 14, 2003 16:51:16

rst
"беовульфе" - это как? и куда?
Если нетрудно поясните!!!


Дата: Дек 14, 2003 16:58:30

беовульф - это Application-clastering solution. Короче система для распределенных вычислений на нескольких машинах.


Дата: Дек 14, 2003 17:01:34 · Поправил: emergenter

rst
ну и как такое можно применить в совсем безобидной задачи?? :-))))) Причем причем тут несколько машин? У меня всего одна машина и я не хочу покупать еще одну или менять мою уже полюбившуюся мне...:-)))


Дата: Дек 14, 2003 17:05:51

формула Тейлора дает достаточно быстро приближенное значение, при этом можешь менять точность (больше итераций - больше точность). Не знаю насколько это быстро по сравнению с сопроцессором.


Дата: Дек 14, 2003 17:07:58

Посчитать синус без сопроцессора можно и даже не слишком сложно, правда навскидку я алгоритма не помню, за малой его для меня актуальностью. Что-то на тему разложения в ряд. Поискал в нете, нашёл что-то похожее:
double sin1(double x) 
{
     int ii; double xx,r,sl,f,delta=0.0001; 
     sl=x; ii=1;   r=0; xx=x*x; 
     f= fabs(sl);
        while (f>delta) 
        {
        r=r+sl; 
            sl=-(sl*xx/(2*ii))/(2*ii+1); 
            f=fabs(sl); 
            ii=ii+1 ; 
         }
       return(r); 
} 
Потом была ещё куча приближённых методов, особенно много их было у всяких спектрумистов, где fpu от рождения нет. ;) Можешь посмотреть, например, здесь: http://ivr.webzone.ru/articles/dop_ar/

Другой вопрос, что ты подчеркнул, что тебя не устраивает именно скорость сопроцессора. Ни один из известных мне способов с точностью того же порядка, что и у fpu, и близко к нему по скорости не приближается. У более шустрых методов существенно ниже точность. Подозреваю, что вместо этого тебе нужно оптимизировать использование синуса. Например, заранее выбрать значение синуса в табличку с каким-нибудь шагом, и брать готовые значения оттуда. В добавок, можно использовать вычисления с фиксированной точкой. А заполнять эти таблички проще и качественнее всего именно сопроцессором...


Дата: Дек 14, 2003 17:13:38

bsl_zcs
спасибо за столь полную информацию...


Дата: Дек 14, 2003 17:37:31

ну и как такое можно применить в совсем безобидной задачи?? :-))))) Причем причем тут несколько машин? У меня всего одна машина и я не хочу покупать еще одну или менять мою уже полюбившуюся мне...:-)))
Ну х.з. Ты сказал нужно быстро - вот я тебе и предложил самый быстрый вариант. Откуда я знаю - может тебе нужна производительность в несколько миллионов синусов в секунду. Тогда кроме как параллельные вычисления тебе ничто не поможет.


Дата: Дек 14, 2003 17:43:37

К написанному bsl_zcs трудно что-нибудь добавить, но гляньте ещё здесь.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057