fmod函数的问题

时间:2021-05-31 18:50:21
#include <stdio.h> 

#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看看手册

#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看看手册

#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.