do_cos_slow
взят из декларации в glibc / sysdeps / ieee754 / dbl-64 / s_sin.c . Он называется do_cos_slow
, потому что он более точен, чем функция, на которой он основан do_cos
согласно комментарию над его объявлением на Строка 164 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Суть .isra
.
sloww1
- это функция, которая вычисляет грех (x + dx) согласно комментарию над ним.
Что касается более быстрой версии cos, я не уверен, что есть более быстрая версия, но если вы обновите свою реализацию glibc или libc, которая предоставляет libm, по крайней мере до glibc 2.28, то вы получите результаты удаления Wilco Dijkstra из этих медленных функций и рефакторинг dosincos, который дает увеличение скорости.
Из сообщения о фиксации
Refactor the sincos implementation - rather than rely on odd partial inlining
of preprocessed portions from sin and cos, explicitly write out the cases.
This makes sincos much easier to maintain and provides an additional 16-20%
speedup between 0 and 2^27. The overall speedup of sincos is 48% over this range.
Between 0 and PI it is 66% faster.
Другими альтернативами, которые вы можете попробовать, являются другие реализации libc или libm, или другие реализации cos, включая avx_mathfun или avx_mathfun с некоторыми исправлениями для более новых GCC или supersimd .