Показать сообщение отдельно
  #3  
Старый 06.05.2009, 15:18
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

lmikle,
Цитата:
Сообщение от gremt
M и N не обязательно являются целыми числами

***
Все гораздо проще =)
На самом деле, достаточно воспользоваться определением логарифма.
Код:
function IsPower(N, M: Real): Boolean;
var
  RealPower: Real;
begin
  RealPower := ln(M) / ln(N); // это степень, в которую нужно возвести N, чтобы получить M
  Result := (RealPower - Trunc(RealPower) < 1E-7); // проверяем степень близости к целому с допуском 1E-7
end;
Поскольку числа вещественные, обязательно должен быть какой-то допуск (я выбрала 1E-7), при непревышении которого степень будет считаться фактически целочисленной.
Ответить с цитированием