马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Chan歪歪520 于 2020-1-17 22:33 编辑 #include <stdio.h>
#include <math.h>
int main()
{
unsigned long long sum = 0;
unsigned long long int temp;
unsigned long long int weight;
int i;
for (i=0; i < 64; i++)
{
temp = pow(2,i);
sum = sum + temp;
}
weight = sum /25000;
printf("should give %d wheats\n",sum);
printf("these wheats wheigh %d kgs\n",weight);
return 0;
}
显示pow未定义???请问是怎么回事啊?
/tmp/ccMDamyO.o: In function `main':
test2.c:(.text+0x35): undefined reference to `pow'
collect2: ld returned 1 exit status
本帖最后由 jackz007 于 2020-1-17 11:20 编辑
在 Linux 系统环境下,用 gcc 编译 C / C++ 代码,如果用到了数学库,必须在编译命令中使用 -lm 选项加以声明。
用下面的命令编译试试: 代码中使用数学库是为了计算 2 的指数幂,其实,2 ^ 0 + a ^ 1 + 2 ^ 2 + 2 ^ 3 + ... + 2 ^ 63 = 0xffffffffffffffff,这个数值很特殊,是一个 64 位无符号整型数所能表达的极限值。
代码中定义的变量都是 unsigned long long,但是,最后在 printf() 中所使用的格式描述符却都是 "%d","%d" 只能把变量当作 32 位变量来显示,在变量的数值超过 32 位的时候,就会出现显示不全的问题,这个显然是隐患!
于是,我帮楼主修改了一个版本,楼主可以参考一下 #include <stdio.h>
int main(void)
{
unsigned long long sum ;
sum = 0xffffffffffffffff ; // 其实,代码中的循环就是为了计算出这个数值
printf("should give %llu wheats\n" , sum) ;
printf("these wheats wheigh %llu kgs\n" , sum / 2500) ;
}
编译这个代码,命令行中就可以不用出现 -lm 选项了。
|