Мой ответ на этот вопрос был этой функцией:
inline bool divisible15(unsigned int x)
{
//286331153 = (2^32 - 1) / 15
//4008636143 = (2^32) - 286331153
return x * 4008636143 <= 286331153;
}
Он отлично работал на моей машине с компилятором VS2008, однако здесь он вообще не работает.
Есть ли у кого-то идея, почему у меня разные результаты для разных компиляторов? unsigned
переполнение не является undefined.
Важное замечание: после некоторого теста было подтверждено, что он быстрее, чем оставление деления на 15. (Однако не для всех компиляторов)