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