Необходимо определить, является ли логарифм a по основанию b целым.
Мое решение:
cout<<fmod(log(a)/log(b),1);
Но, например, при тесте a=46656 b=6, программа выдает 8.88178e-016, вместо ожидаемого 0.
Как это можно исправить / реализовать другим способом?
Логарифм является целым тогда и только тогда, когда число является степенью основания.
Операции с дробными числами вносят в вычисления погрешность, поэтому, если по условию даны целые числа (в смысле, они хранятся в целочисленных переменных), то имеет смысл не жалеть 32 операции чтобы просто проверить соответствующие степени:
bool check(unsigned a, unsigned b)
{
unsigned x;
for (x=1; x<a; x*=b);
return x==a;
}
При необходимости стоит подумать о переполнении.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости