在資訊領域很常會用到以2為底數的log2,但是C/C++並沒有直接提供log2的函式,不過卻可以很簡單地以換底公式使用log()函式來達成log2的功用。
必須先#include<math.h>或#include<cmath>才能使用log()函式。
/**
Theme: log2
Compiler: Dev C++ 4.9.9.2
Date: 100/11/8
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
#include<math.h>
using namespace std;
int main(){
double answer1=0;
double answer2=0;
for(int i=1; i<=16; i++){
answer1 = ceil(log(i+1) / log(2));
answer2 = floor(log(i) / log(2))+1;
cout<<"a1: "<<answer1<<" a2: "<<answer2<<endl;
}
system("pause");
return 0;
}
這裡想展示⌊logn⌋+1、⌈log(n+1)⌉兩者得差別,得到得結果一樣:
a1: 1 a2: 1
a1: 2 a2: 2
a1: 2 a2: 2
a1: 3 a2: 3
a1: 3 a2: 3
a1: 3 a2: 3
a1: 3 a2: 3
a1: 4 a2: 4
a1: 4 a2: 4
a1: 4 a2: 4
a1: 4 a2: 4
a1: 4 a2: 4
a1: 4 a2: 4
a1: 4 a2: 4
a1: 4 a2: 4
a1: 5 a2: 5
請按任意鍵繼續 . . .
其實無論以任何數為底,都可以使用log(i) / log(2),只要把2改成你想要的底數即可。
哈~不知道為何我寫這篇文章時,會認為log2和log10不存在?偶然看到他人程式碼中有使用到,便馬上拿來測試,居然可耶!?而且IDE一樣,到底當時的我哪裡有洞呢:P
/**
Theme: log
Compiler: Dev C++ 4.9.9.2
Date: 102/01/06
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
#include<cmath>
using namespace std;
int main(){
cout<<log(7.0)/log(10.0)<<endl;
cout<<log10(7.0)<<endl;
cout<<log(10.0)/log(2.0)<<endl;
cout<<log2(10.0)<<endl;
system("pause");
return 0;
}
執行結果:
0.845098
0.845098
3.32193
3.32193
請按任意鍵繼續 . . .
隨意留個言吧:)~