Log2 не найден в моей math.h?
Я использую довольно новую установку Visual С++ 2008 Express.
Я пытаюсь скомпилировать программу, которая использует функцию log2, которая была найдена путем включения Eclipse на Mac, но этот компьютер Windows не может найти функцию (ошибка C3861: "log2": идентификатор не найден).
То, как я это понял, включает каталоги, специфичные для IDE, не так ли? math.h отсутствует в каталоге Microsoft SDK\Windows\v6.0A\Include \, но я нашел math.h в этом каталоге: Microsoft Visual Studio 9.0\VC\include. В этом каталоге есть cmath...
Где log2?
Ответы
Ответ 1
Из здесь:
Прототип: двойной log2 (двойной номер);
Файл заголовка: math.h(C) или cmath (С++)
Альтернативно эмулируйте его как здесь
#include <math.h>
...
// Calculates log2 of number.
double Log2( double n )
{
// log(n)/log(2) is log2.
return log( n ) / log( 2 );
}
К сожалению, Microsoft не предоставляет его.
Ответ 2
Если вы пытаетесь найти log2
строго целых чисел, некоторые побитовые не могут повредить:
#include <stdio.h>
unsigned 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 ) ) ;
}
Ответ 3
log2()
определяется только в стандарте C99, а не в стандарте C90. Microsoft Visual С++ не полностью совместим с C99 (черт возьми, не существует ни одного полностью совместимого с C99 компилятора, я считаю - даже GCC полностью не поддерживает его), поэтому не требуется предоставлять log2()
.
Ответ 4
В Visual Studio 2013 добавлен log2()
. См. Поддержка библиотеки C99 в Visual Studio 2013.