我不知道为什么这个程序不起作用。这是C语言。在Unix中,它显示“未定义的日志引用”任何人都可以帮我找出错误并告诉我如何修复它?
或者:
#include <stdio.h>
#include <math.h>
int main()
{
double x0, x1=4, x2=5, y0, sta=10, error = 0.00001, base = 2;
do
{
x0 = (x1 + x2) / 2;
y0 = (x0) * (log(x0))/(log(base));
if ( y0 > sta )
{
x2 = x0;
}else{
x1 = x0;
}
}while(y0 > error);
printf("%lf", x0);
return 0;
}
(注意转录错误!我希望没有。)
答案 0 :(得分:3)
您必须链接到数学库。
user@x:~/src$
user@x:~/src$ gcc -Wall file_that_uses_math_library.c -o bin -lm
这应该可以解决您的问题。它没有找到log()函数,因为代码在编译时没有链接。
编辑:
您在对此答案的评论中提到“没有打印出来”。这是因为您的代码错误并且包含错误。条件y0 > error
永远不会满足,因此循环是无限的。如果您接听 printf()并将其置于循环内部,您将看到循环永远不会结束,并且反复打印相同的值。
如果您编译/运行此代码,您将看到y0的值始终为10并且永远不会小于.000001
#include <stdio.h>
#include <math.h>
int main()
{
double x0, x1=4, x2=5, y0, sta=10, error = 0.00001, base = 2;
do
{
x0 = (x1 + x2) / 2;
y0 = (x0) * (log(x0))/(log(base));
if ( y0 > sta )
{
x2 = x0;
}else{
x1 = x0;
}
printf("%lf is not less than %f\n", y0, error);
}while(y0 > error);
return 0;
}
您可以从学习如何使用GNU调试器中受益,因为在主上设置 breakpoint
,输入命令next
一次只需按住返回,您就会看到您的程序永远不会离开循环。我不打算把它的输出放到这篇文章中,因为它会很长。