2011-11-30 17 views
0

我一直在玩最近的一些數學,我想知道是否有人寫過/看過一個C++實現的日誌,可以指定基地(根..?)?如:一個可以指定基礎的日誌的C++實現?

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

很顯然,我寧願賦予基本作爲參數:雙d =日誌(B,X);

謝謝你的時間和任何答案,非常感謝。 :}

編輯:另外,我認爲它會使用泰勒系列?

+5

'log_b(x)'與'x ^(1/b)'不一樣(正如你的例子所聲稱的那樣)。 – Mankarse

+0

@Erkling:下面的兩個答案都是正確的,你應該接受其中的一個。慎重考慮。 – andand

回答

16

log_b_(x)= log(x)/ log(b)。只是這樣做:

double log(double base, double x) 
{ 
    return std::log(x)/std::log(base); 
} 
+0

非常感謝您的回答。 :) – Erkling

7

這是直接實現自己:

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

是一般有用嗎?或者幾乎所有的用途歸於loglog10log2

+0

'log10'是否只是爲了方便而存在,還是因爲它通常比'log(x)/ log(10)'更準確?如果是後者,那麼它不一定直接實現'logb'「適當地」:即使'b'不是固定的,也可能有比這更準確的實現。 –

+0

'log10'存在,因爲標準要求它存在:-)。我認爲這是更方便; IIRC,它出現在最早的Unix中,而且很多數學函數的準確度都很差。關於精度,我不確定獨特的實現會不會提高精度(特別是在具有擴展精度FP寄存器的機器上);但是,他們當然可以更快。這也可能是一個動機。 (WRT精度,該標準還需要一個'log1p'函數,這**是**嚴格按照精度激發的。) –

相關問題