#include <math.h>
float MyRnd()
{
double long M;//请注意,这里一定要用到double long,否则计算2^32会溢出
float Lamda, Rn, Xn;
Lamda=pow(5,5);
M=pow(2,32);
Xn=fmod(Lamda*Xn,M);//这个地方有什么问题
Rn=Xn/M;
return Rn;
}
main()
{
int i;
for(i = 0; i < 100; i++;)
{
printf("%d",MyRnd());
}
}
编译的结果:
/tmp/cckGk3qS.o: In function `MyRnd':
/home/jiayuan/code/随机算法.c:14: undefined reference to `fmod'
collect2: ld 返回 1
6 个解决方案
#1
LZ用的是什么编译环境?
我只知道gcc的情况。gcc做链接的时候,缺省情况下不链接数学库,所以找不到fmod的实现。必须加选项指示编译器链接数学库:
gcc -lm test.c
其它编译器可能也是类似情况吧,LZ看看手册
我只知道gcc的情况。gcc做链接的时候,缺省情况下不链接数学库,所以找不到fmod的实现。必须加选项指示编译器链接数学库:
gcc -lm test.c
其它编译器可能也是类似情况吧,LZ看看手册
#2
double fmod(double x, double y);
float fmodf(float x, float y);
long double fmodl(long double x, long double y);
So you should try the last one.
#3
我用的就是gcc
试试你的方法
试试你的方法
#4
想问一楼一下。-l是链接选项,链接到库文件,-m是什么选项阿,在gcc里找了半天还是没有找到阿
选项太多了。慢慢找会把我给找疯的。
选项太多了。慢慢找会把我给找疯的。
#5
用你的方法编译通过了。在此谢谢额
#6
-lm 的意思就是挂接math库.libm,数学库使这个,简写就是-lm。比如有一个库是libst.so,那就是-lst.
#1
LZ用的是什么编译环境?
我只知道gcc的情况。gcc做链接的时候,缺省情况下不链接数学库,所以找不到fmod的实现。必须加选项指示编译器链接数学库:
gcc -lm test.c
其它编译器可能也是类似情况吧,LZ看看手册
我只知道gcc的情况。gcc做链接的时候,缺省情况下不链接数学库,所以找不到fmod的实现。必须加选项指示编译器链接数学库:
gcc -lm test.c
其它编译器可能也是类似情况吧,LZ看看手册
#2
double fmod(double x, double y);
float fmodf(float x, float y);
long double fmodl(long double x, long double y);
So you should try the last one.
#3
我用的就是gcc
试试你的方法
试试你的方法
#4
想问一楼一下。-l是链接选项,链接到库文件,-m是什么选项阿,在gcc里找了半天还是没有找到阿
选项太多了。慢慢找会把我给找疯的。
选项太多了。慢慢找会把我给找疯的。
#5
用你的方法编译通过了。在此谢谢额
#6
-lm 的意思就是挂接math库.libm,数学库使这个,简写就是-lm。比如有一个库是libst.so,那就是-lst.