Необходимо определить, является ли логарифм 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;
}
При необходимости стоит подумать о переполнении.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Сервер и клиентОтправляю данные, ничего не происходит, дебажу send выдает SIGPIPE? В чем может быть проблема?
Как полоска внизу выбраного Item и текст задать другого цвета??
Нужно переставить в конец нулевые элементы, не меняя порядок ненулевыхнулевые элементы получается переставить в конец, но порядок ненулевых...