Я рассматриваю вопрос на прошлый час, но есть только точки серии Тейлора или некоторый пример кода, который либо слишком медленный, либо вообще не компилируется. Ну, большинство ответов, которые я нашел через Google, это "Google, это уже было задано", но, к сожалению, это не так...
Я профилирую свою игру на low-end Pentium 4 и обнаружил, что ~ 85% времени выполнения тратится на вычисление синуса, косинуса и квадратного корня (из стандартной библиотеки С++ в Visual Studio), и это, похоже, сильно CPU зависит (на моем I7 одни и те же функции получили только 5% времени выполнения, а игра waaaaaaaaaay быстрее). Я не могу оптимизировать эти три функции, ни вычислять как синус, ни косинус за один проход (там взаимозависимый), но мне не нужны слишком точные результаты для моего моделирования, поэтому я могу жить с более быстрым приближением.
Итак, вопрос: каков самый быстрый способ вычисления синуса, косинуса и квадратного корня для float в С++?
ИЗМЕНИТЬ Таблица Lookup более болезненна, поскольку в результате Cache Miss является более дорогостоящим для современного процессора, чем Taylor Series. В наши дни CPU очень быстры, а кеш - нет.
Я допустил ошибку, хотя мне нужно вычислить несколько факториалов для серии Тейлора, и теперь я вижу, что они могут быть реализованы как константы.
Итак, обновленный вопрос: есть ли быстрая оптимизация для квадратного корня?
EDIT2
Я использую квадратный корень для вычисления расстояния, а не нормализации - не может использовать алгоритм быстрого обратного квадратного корня (как указано в комментарии: http://en.wikipedia.org/wiki/Fast_inverse_square_root
EDIT3
Я также не могу работать на квадратах расстояний, мне нужно точное расстояние для вычислений