Форум программистов, компьютерный форум, киберфорум
Наши страницы

Максимально быстрый вариант вычисления sinf/cosf - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Простое создание строки из объектов разных типов данных http://www.cyberforum.ru/cpp-beginners/thread1234710.html
Всем доброго времени суток. Создал класс, который (по моему мнению) сделает более удобным создание строк и их передачу в функции, принимающие строки. Посоветуйте, как можно (если нужно) его улучшить....
C++ Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор Скажите правильно ли я выделяю и очищаю память под двухмерный вектор class A { private: std::vector< std::vector<int> >* vec; public: A() http://www.cyberforum.ru/cpp-beginners/thread1234703.html
C++ Циклы: вычисление синуса
Приступил к циклам. Задание такое: Как известно, функция sin(x) может может быть вычислена в виде ряда sin(x)=x-x^3/3!+x^5/5!-...=\sum_{n=0}^{\propto }(-1)^n*(x^(2n+1))/(2n+1)! На практике при...
Boost::regex не могу сформировать ссылку на паттерн при поиске C++
Необходимо найти 2 повторяющихся заголовка и объединить некоторое содержимое через replace. Хотел создать выражение для поиска: ^(prefix=)(.*)(\n)(*)($2) Вот только ссылка $2 не возвращает...
C++ Инициализация переменных - некорректно работает пример из книги http://www.cyberforum.ru/cpp-beginners/thread1234669.html
Взял задачку из книги Г.Шилда. Должно показывать 1 3 6 10 15. Но у меня выдает 1 2 3 4 5. Набрал всё точь в точь с книги, в чём проблема, кто подскажет? #include <iostream> #include <conio.h>...
C++ Не работает цикл for #include <iostream> #include <conio.h> using namespace std; int main() { int x; for(x=0; x<10; x++); cout << x << " "; _getch(); return 0; } подробнее

Показать сообщение отдельно
VTsaregorodtsev
377 / 360 / 53
Регистрация: 19.02.2010
Сообщений: 1,522
03.08.2014, 21:44
Цитата Сообщение от Evg Посмотреть сообщение
Чисто на всякий случай. Если программа короткая, то она совсем необязательно работает быстро. Программа из одной аппаратной операции fsin будет работать 200 тактов
Лезем в оффтопик (для сишного раздела форума) - ну да ладно.
Не 200 - а порядка 100 (если не брать огрызки типа Атомов). В общем, у Агнера Фога в мануале по проц.командам хорошо расписаны растактовки для кучи процессоров.
Во вторых - я и не утверждал, что короткая прога всегда будет более быстрой. Просто при таблицах - будет как минимум одно деление (тоже времязатратная команда), и если этап с делениями ещё и можно будет векторизовать - то потом по таблице всё равно для каждого индекса придётся бегать по-отдельности (тут могу и ошибаться - может, где-нить в SSE4 и есть нужная команда, но в таком случае рискуем потерять портируемость на вполне ещё пригодные для работы компутеры с процами на пару поколений назад).
Просто син-кос - довольно скользкий для оптимизации пример (макс. выигрыш - ну, будет ускорение в разы, а вокруг ускоренного фрагмента же лежит неускоренная остальная программа, и весь выигрыш может замаскироваться (ну, будет прога работать 99 сек вместо 100 - толку от этого?)). Вот если бы была exp() - там да, её можно аппроксимировать и векторизовать всего несколькими командами, и ничего сложнее умножения при этом не будет (рецепт опубликован буржуинами в статьях 1999 и 2008годов, у меня работает - но никому подробности не расскажу, ибо ускорение выходит во многие десятки раз, и ноу-хау поэтому пусть остаётся скрытым для ширнармасс). Таблиц при аппроксимации exp() в данном случае нет, аппроксимация тоже идёт не через приближение полиномами (или чем-то иным) - а совсем на иной идее.

Ну и топикстартеру. Может, стоит переделать алгоритм/задачу так, чтобы синус-косинус не вычислять. Вернее, чтобы взамен аргумента этих функций получались сразу индексы в таблице. Т.е., например, получались углы в градусах. И хорошо, если они будут получаться в виде целых значений - чтобы затем не округлять, а то округление плавучки тоже бывает тормозным: я, например, при работе с компилятором от Борланда/Ембаркадеро в критических местах в явную вписываю вызов своей собственной функции FtoI(val) вместо округления через приведение типа, т.е. через (int)val - а то Борланд реализует приведение типа (и округление) через вызов дольше работающей функции с именем ftol или где-то рядом.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru