Если имеется следующая функция C, используемая для определения, является ли одно число кратным другого, для произвольного допуска
#include <math.h>
#define TOLERANCE 0.0001
int IsMultipleOf(double x,double mod)
{
return(fabs(fmod(x, mod)) < TOLERANCE);
}
Он отлично работает, но профилирование показывает, что оно очень медленное, в том смысле, что оно стало кандидатом на оптимизацию. Около 75% времени тратится на modulo
, а оставшееся время на fabs
. Я пытаюсь найти способ ускорить процесс, используя что-то вроде справочной таблицы. Параметр x
меняется регулярно, тогда как mod
меняется нечасто. Число возможных значений x достаточно мало, чтобы пространство для поиска не было проблемой, обычно это будет одно из нескольких сотен возможных значений. Я могу легко избавиться от fabs
, но не могу найти разумную альтернативу по модулю. Любые идеи о том, как оптимизировать выше?
Редактировать Код будет работать на многих настольных и мобильных устройствах Windows, поэтому процессоры могут включать Intel, AMD для настольных ПК и ARM или SH4 для мобильных устройств. VisualStudio 2008 - это компилятор.