Всем привет!
Возникла потребность написать быстрое вычисление Sin и Cos. За основу для вычислений взял разложение по ряду Тейлора. Использую в 3D-системах (OpenGL и графическая библиотека своей разработки). К сожалению свести ряд «идеально» для Double не получается, но это компенсируется хорошим ускорением. Код написан на встроенном в Delphi XE6 ассемблере. Используется SSE2.
Для научных вычислений не подходит, а для использования в играх вполне.
Точности хватает, чтобы покрыть разрядность числа Single, которое используется
для умножения на матрицу.
В итоге:
- Достигнутая точность результата равна: 10.e-13
- Максимальное расхождение с CPU — 0.000000000000045.
- Скорость увеличена в сравнении с CPU в 4.75 раза.
- Скорость увеличена в сравнении с Math.Sin и Math.Cos в 2.6 раза.
Для теста использовал процессор Intel Core-i7 6950X Extreme 3.0 ГГц.
Исходный текст на Delphi встроен в комментарии к ассемблеру.
Читать полностью »