Реализация журнала С++, для которой можно указать базу?

Недавно я играл с математикой, и я хотел бы знать, писал ли/видел ли кто-нибудь реализацию журнала на С++, для которой можно указать базу (корень..?)? Как в:

http://i1091.photobucket.com/albums/i383/dannydeth1/forumla.png

Очевидно, я бы предпочел указать базу в качестве аргумента: double d = log(b,x);

Спасибо за ваше время, и любые ответы очень ценятся. :}

РЕДАКТИРОВАТЬ: Кроме того, я так понимаю, будет использоваться серия Тейлора?


person Erkling    schedule 30.11.2011    source источник
comment
log_b(x) не совпадает с x^(1/b) (как утверждает ваш пример).   -  person Mankarse    schedule 30.11.2011
comment
@Erkling: Оба ответа ниже верны, и вы должны принять один из них. Рассмотрите внимательно.   -  person andand    schedule 30.11.2011


Ответы (2)


log_b_(x) = log(x) / log(b). Просто сделайте это:

double log(double base, double x)
{
    return std::log(x) / std::log(base);
}
person voltrevo    schedule 30.11.2011
comment
Большое спасибо за ваш ответ. :) - person Erkling; 30.11.2011

Это просто реализовать самостоятельно:

double
logb( double n, double b )
{
    return log(n) / log(b);
}

Это вообще полезно? Или практически все виды использования относятся к log, log10 и log2?

person James Kanze    schedule 30.11.2011
comment
Существует ли log10 только для удобства или потому, что обычно он более точен, чем log(x)/log(10)? Если второе, то правильно реализовать logb не обязательно просто: может быть более точная реализация, даже если b не исправлена. - person Steve Jessop; 30.11.2011
comment
log10 существует, потому что стандарт требует его существования :-). Я думаю, что это больше удобства; IIRC, он присутствовал в самой ранней Unix, и многие математические функции тогда имели ужасную точность. Что касается точности, я не уверен, что разные реализации обязательно дадут лучшую точность (особенно на машинах с регистрами FP повышенной точности); однако они, безусловно, могут быть быстрее. Что тоже может быть мотивом. (Точность WRT, стандарт также требует функции log1p, которая обусловлена исключительно точностью.) - person James Kanze; 30.11.2011