Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Самостоятельная реализация sin, cos и кв. корня |
Автор: 4етырнадцатый 5.5.2008, 11:15 |
Люди!!! Необходимо реализовать на чистом С(!!!) без подключения библиотек (в т.ч. math) функции синуса, косинуса (в принципе хватит одной из них), а также функцию взятия квадратного корня. Пойдут любые алгоритмы, в т. ч. рекурсивные, итеративные и др. Желательно вычислять с заданной точностью. В крайнем случае можно на ассемблере. Или дайте хотя бы описание алгоритма!!! Огромная просьба откликнуться и помочь!!! |
Автор: bsa 5.5.2008, 11:24 |
Воспользуйся поиском в гугле по словам "синус ряд тейлора", "косинус ряд тейлора", "алгоритм квадратного корня" и т.д. |
Автор: ksili 5.5.2008, 11:29 |
На ассемблере есть инструкции FSIN, FCOS и FSQRT. Так что никаких алгоритмов и не надо! ![]() ![]() Только разберитесь со стеком FPU, чтобы он не переполнялся при использовании указанных функций |
Автор: archimed7592 5.5.2008, 11:29 |
Тригонометрические ф-ции(из-за своей невычисляемой природы) считаются по таблицам. Кв. корень - посредством итеративных приближений. |
Автор: bronislav 5.5.2008, 12:10 | ||
насколько я знаю, эти функции вычисляются приблизительно (т.е. раскладываются в ряд тейлора) |
Автор: Lycifer 5.5.2008, 17:03 |
Ну насчёт квадратного корня я тебе подскажу,а вот на счёт sin,cos думаё сам. #define ITNUM 4 float Sqroot1(float x) { int sp=0,i,inv=0; float a,b; if(x<=0.F) return(0.F); // 0.F= 0 случай если не чего считать if(x<1.F) { x=1.F/x; inv=1; } while(x>16.F) { sp++; x/=16.F; } a=2.F; то и есть 2 for(i=ITNUM;i>0;i--) { b=x/a; a+=b; a*=0.5F; } while(sp>0) { sp--; a*=4.F;} if(inv) a=1.F/a; return(a); } Полное описание делать не буду, ну ты же должен осознать формулу!!!! ![]() Добавлено через 2 минуты и 42 секунды да,а насчёт синусов и косинусов, я видел как это делают через тангенс.(так что дело за малым) |
Автор: Igor_K 5.5.2008, 18:03 | ||
Ага. От сцылка http://algolist.manual.ru/maths/count_fast/sincos.php |
Автор: archimed7592 5.5.2008, 19:03 | ||
Ссылку дать не могу, но, из авторитетного, на мой взгляд, источника(ixbt.com) слышал, в обзоре одного из GPU, что-то на этот счёт(про то что вычисляются по таблицам). Возможно меня подводит память, возможно сейчас уже считают по другому, а возможно я прав. В общем, гуглите и гулимы будете ![]() |