Я гуглил этот вопрос уже час, но есть только указания на серию Тейлора или какой-то пример кода, который либо слишком медленный, либо вообще не компилируется. Что ж, большинство ответов, которые я нашел в 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++ (не обязательно должна быть очень точной) ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение