функция pow в C

Я пишу код C, который имеет функцию власти, которая находится из библиотеки math.h. когда я скомпилировал свою программу, я получил ошибку, которая является «неопределенной ссылкой на« pow »function», я скомпилирую свою программу с помощью gcc-компилятора (fedora 9).

Я вставляю флаг -lm в gcc, тогда ошибка опущена, но выход функции pow равен 0.

#include main() { double a = 4, b = 2; b = pow(b,a); } 

Может кто-нибудь мне помочь? Есть ли проблема в моем компиляторе?

Благодарю.

Ваша программа ничего не выводит.

0, о котором вы говорите, вероятно, является кодом выхода, который будет равен 0, если вы явно не возвращаетесь с main .

Попробуйте изменить его на стандартную подпись и вернуть b :

 int main(void) { ... return b; } 

Обратите внимание, что возвращаемые значения в основном ограничены 8-битной информацией, поэтому очень, очень ограничены.

Используйте printf для отображения значения.

 #include  ... printf("%f\n", b); ... 

Вы должны использовать спецификатор преобразования с плавающей запятой ( f , g или e ) для печати double значений. Вы не можете использовать d или другие и ожидать согласованного вывода. (На самом деле это было бы неопределенное поведение.)

Для всех, кто ищет такой ответ:

Это не сработает :

 gcc my_program.c -o my_program 

Это произведет что-то вроде этого:

 /tmp/cc8li91s.o: In function `main': my_program.c:(.text+0x2d): undefined reference to `pow' collect2: ld returned 1 exit status 

Это будет работать :

 gcc my_program.c -o my_program -lm 

Вам не хватает строки printf для печати значения в stdout. Попробуй это:

 #include  #include  int main() { double a=4, b=2, c; c = pow(b,a); printf("%g^%g=%g\n", a,b,c); return 0; } 

Выход будет:

 4^2=16 

Здесь есть путаница относительно базы и экспоненты. Это не сразу видно, потому что оба 2 ^ 4 и 4 ^ 2 равны 16.

 void powQuestion() { double a, b, c; a = 4.0; b = 2.0; c = pow(b, a); printf("%g ^ %g = %g\n", a,b,c); // Output: 4 ^ 2 = 16 a = 9.0; b = 2.0; c = pow(b, a); printf("%g ^ %g = %g\n", a,b,c); // Output: 9 ^ 2 = 512 >> Wrong result; 512 should be 81 << // K & R, Second Edition, Fifty Second Printing, p 251: pow(x,y) x to the y double x, y, p; x = 9.0; y = 2.0; p = pow(x, y); printf("%g ^ %g = %g\n", x, y, p); // Output: 9 ^ 2 = 81 // even more explicitly double base, exponent, power; base = 9.0; exponent = 2.0; power = pow(base, exponent); printf("%g ^ %g = %g\n", base, exponent, power); // Output: 9 ^ 2 = 81 }