Я думаю, что стандартная библиотека fmod()
будет лучшим выбором в большинстве случаев. Вот ссылка на обсуждение нескольких простых алгоритмов.
На моей машине fmod()
использует оптимизированный встроенный код сборки (/usr/include/bits/mathinline.h
):
#if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5)
__inline_mathcodeNP2 (fmod, __x, __y, \
register long double __value; \
__asm __volatile__ \
("1: fprem\n\t" \
"fnstsw %%ax\n\t" \
"sahf\n\t" \
"jp 1b" \
: "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc"); \
return __value)
#endif
Таким образом, он фактически использует специальную инструкцию CPU (fprem) для вычисления.