Вывод дробной части от логарифма C++

285
13 января 2017, 09:24

Необходимо определить, является ли логарифм a по основанию b целым. Мое решение: cout<<fmod(log(a)/log(b),1); Но, например, при тесте a=46656 b=6, программа выдает 8.88178e-016, вместо ожидаемого 0. Как это можно исправить / реализовать другим способом?

Answer 1

Логарифм является целым тогда и только тогда, когда число является степенью основания.

Операции с дробными числами вносят в вычисления погрешность, поэтому, если по условию даны целые числа (в смысле, они хранятся в целочисленных переменных), то имеет смысл не жалеть 32 операции чтобы просто проверить соответствующие степени:

bool check(unsigned a, unsigned b)
{
  unsigned x;
  for (x=1; x<a; x*=b);
  return x==a;
}

При необходимости стоит подумать о переполнении.

READ ALSO
Помогите осознать суть сетей

Помогите осознать суть сетей

У меня есть два ноутбукаНа них стоят ubuntu

281
Освоение сетей. Клиент сервер

Освоение сетей. Клиент сервер

Сервер и клиентОтправляю данные, ничего не происходит, дебажу send выдает SIGPIPE? В чем может быть проблема?

284
изменить цвет (когда нажата) TabItem в TabControl

изменить цвет (когда нажата) TabItem в TabControl

Как полоска внизу выбраного Item и текст задать другого цвета??

296
Переставить нули в конец массива

Переставить нули в конец массива

Нужно переставить в конец нулевые элементы, не меняя порядок ненулевыхнулевые элементы получается переставить в конец, но порядок ненулевых...

511