Использование функции pow() выбрасывает опорную ошибку undefined в C
Почему в C:
работает следующий бит кода:
int res = pow(2, 3);
printf("%d\n", res);
в то время как это другое не делает?
int a = 2;
int b = 3;
int res = pow(a, b);
printf("%d\n", res);
Даже если я попробую
double a = 2;
double b = 3;
double res = pow(a, b);
printf("%f\n", res);
Я получаю
undefined ссылка на `pow '
Что я делаю неправильно?
Ответы
Ответ 1
Когда это работает, это потому, что вычисление было выполнено самим компилятором (и включено в двоичный файл, как если бы вы его записали)
printf("8\n");
Когда это не работает, это потому, что функция pow
включена в математическую библиотеку, а математическая библиотека по умолчанию не связана с вашим двоичным файлом.
Чтобы связать математическую библиотеку, если ваш компилятор gcc, используйте
gcc ... -lm ...
С другими компиляторами должно быть одинаково:)
но прочитайте документацию
Ответ 2
undefined reference to 'pow'
звучит как ошибка компоновщика. Вы не связываетесь в математической библиотеке, даже если вы введете функцию pow
, включив <math.h>
.
С помощью gcc используйте параметр командной строки -lm
для ссылки в math lib.
Ответ 3
Используйте это как
#include <math.h>
#include <stdio.h>
int main(void)
{
for(int i = 1; i < 5; i++)
printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));
return 0;
}
Вывод:
pow (3.2, 1) = 3.200000
Ответ 4
undefined ссылка на `pow '
поскольку мощность для любого числа должна иметь целочисленное значение как мощность
pow(x,y)
where, x must be real and y must be a whole number