我正在使用相当新的Visual C++ 2008 Express安装.
我正在尝试编译一个使用log2函数的程序,该程序是通过在Mac上使用Eclipse而找到的,但是这台Windows计算机找不到该函数(错误C3861:'log2':未找到标识符).
我理解它的方式,包括目录是IDE特有的,对吧?我的Microsoft SDKs\Windows\v6.0A\Include \目录中没有math.h,但我确实在这个目录中找到了math.h:Microsoft Visual Studio 9.0\VC\include.该目录中还有一个cmath ......
log2在哪里?
从这里:
原型:双log2(双倍数);
头文件:math.h(C)或cmath(C++)
或者像这里一样模仿它
#include... // Calculates log2 of number. double Log2( double n ) { // log(n)/log(2) is log2. return log( n ) / log( 2 ); }
不幸的是,微软不提供它.
log2()
仅在C99标准中定义,而不是C90标准.Microsoft Visual C++并不完全符合C99(哎呀,现在没有一个完全符合C99标准的编译器,我相信 - 甚至GCC都不支持它),因此不需要提供log2()
.
如果你试图找到log2
严格的整数,一些按位不会伤害:
#includeunsigned int log2( unsigned int x ) { unsigned int ans = 0 ; while( x>>=1 ) ans++; return ans ; } int main() { // log(7) = 2 here, log(8)=3. //for( int i = 0 ; i < 32 ; i++ ) // printf( "log_2( %d ) = %d\n", i, log2( i ) ) ; for( unsigned int i = 1 ; i <= (1<<30) ; i <<= 1 ) printf( "log_2( %d ) = %d\n", i, log2( i ) ) ; }