Создание функции журнала с пользовательской базой - PullRequest
7 голосов
/ 12 июля 2011

У меня есть формула, и эта формула использует функцию журнала с пользовательской базой, например, log с базой b и значением x.В target-c я знаю, что есть функции журнала, которые вычисляют без основания и основания либо 2, либо 10.

Есть ли функция, которая может вычислять функцию журнала с пользовательской / переменной базой?или, может быть, есть альтернативный метод заполнения этой формулы.

Основная идея моей формулы - это лог (1 + 0,02) (1,26825) (1 + 0,02 - основание).Это должно быть 12.000.

Ответы [ 3 ]

15 голосов
/ 12 июля 2011

Как это:

double logWithBase(double base, double x) {
    return log(x) / log(base);
}
2 голосов
/ 12 июля 2011

Вы можете вычислить произвольные логарифмы с помощью log<sub>b</sub>x = log<sub>c</sub>x / log<sub>c</sub>b, где c является одним из наиболее доступных оснований, таких как 10 или e.

Для вашего конкретного примера log<sub>e</sub>1.26825 = 0.237637997 и log<sub>e</sub>1.02 = 0.019802627. Это 12.000 (в пределах точности моего калькулятора): 0.237637997 / 0.019802627 = 12.000326876.

Фактически, 1.02<sup>12</sup> на самом деле 1.268241795, и, если вы используете это значение, вы получите намного ближе к 12:

  • log<sub>e</sub>1.268241795 = 0.237631528
  • log<sub>e</sub>1.02 = 0.019802627
  • 0.237631528 / 0.019802627 = 12.000000197.
1 голос
/ 12 июля 2011

Рэй прав, но вот модификация метода Obj-C:

-(double) logWithBase:(double)base andNumber:(double)x {
    return log(x) / log(base);
}
...