C言語で対数を計算するサブルーチンを作ろうと思ってるのですがアルゴリズムが分かりません。

標準関数のmath.hをインクルードすれば底を10とした対数は計算できるみたいですが他は無理みたいです。

少なくともlog 2 xが計算できれば今は何とかなるのですが汎用性を考えて今のうちにさまざまな底で対数を計算できるサブルーチンを作っておこうかと思っております。

私のイメージとしては

//bに底 xに真数を受け取る
double king_of_log(double b, double x){
 double ret;
    :

    :
 ■whiile(ret≠log b x)
 |logの計算
 ■
    :

    :
 return ret;
}

みたいな関数にしたいと思っております。

アルゴリズムだけでも教えていただければ幸いです。