Самая быстрая реализация синуса, косинуса и квадратного корня в C++ (не обязательно должна быть очень точной)C++

Программы на C++. Форум разработчиков
Anonymous
Самая быстрая реализация синуса, косинуса и квадратного корня в C++ (не обязательно должна быть очень точной)

Сообщение Anonymous »

Я гуглил этот вопрос уже час, но есть только указания на серию Тейлора или какой-то пример кода, который либо слишком медленный, либо вообще не компилируется. Что ж, большинство ответов, которые я нашел в Google, - это «Погуглите, об этом уже спрашивали», но, к сожалению, это не так...

Я Я профилирую свою игру на младшем Pentium 4 и обнаружил, что ~ 85% времени выполнения тратится на вычисление синуса, косинуса и квадратного корня (из стандартной библиотеки C++ в Visual Studio), и это, похоже, сильно зависит от процессора (от мой I7 получил только те же функции 5% времени выполнения, и игра становится ваааааааааа быстрее). Я не могу оптимизировать эти три функции или вычислить синус и косинус за один проход (они взаимозависимы), но мне не нужны слишком точные результаты для моего моделирования, поэтому я могу жить с более быстрым приближением.

Итак, вопрос: каков самый быстрый способ вычислить синус, косинус и квадратный корень для числа с плавающей запятой в C++?

EDIT
Таблица поиска становится более болезненной, поскольку в результате Cache Miss обходится намного дороже для современного процессора, чем Taylor Series. В наши дни процессоры такие быстрые, а кеш нет.

Я допустил ошибку, подумал, что мне нужно вычислить несколько факториалов для ряда Тейлора, и я вижу теперь их можно реализовать как константы.

Итак, обновленный вопрос: есть ли какая-нибудь быстрая оптимизация и для квадратного корня?

EDIT2

Я я использую квадратный корень для расчета расстояния, а не нормализацию - не могу использовать быстрый алгоритм обратного квадратного корня (как указано в комментарии: http://en.wikipedia.org/wiki/Fast_inverse_square_root

EDIT3

Я также не могу работать с квадратами расстояний, мне нужно точное расстояние для расчетов

Подробнее здесь: https://stackoverflow.com/questions/186 ... -need-to-b

Вернуться в «C++»