如何用C语言产生0到1之间的随机数?
展开全部
方法一:
1、功能:
产生0到1之间均匀分布的一个随机数
2、方法说明:
设m=216,产生产生0到1之间均匀分布的一个随机数的计算公式如下:
ri=mod(2053ri-1
+13849,m),i=1,2,3……
pi
=ri/m
例:连续产生10个0到1之间均匀分布的一个随机数 。r的初值取5.0
#include "stdio.h"
double rnd1(double *r)
{ int m;
double s,u,v,p;
s=65536.0; u=2053.0; v=13849.0;
m=(int)(*r/s); *r=*r-m*s;
*r=u*(*r)+v; m=(int)(*r/s);
*r=*r-m*s; p=*r/s;
return(p);
}
main()
{ int i;
double r;
r=5.0;
printf("\n");
for (i=0; i<=9; i++)
printf("%10.7lf\n",rnd1(&r));
printf("\n");
getch();
}方法二:
float
b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);
注释:
stdlib.h头文件中有宏#define
RAND_MAX
0x7fff
rand()产生一个0到0x7ffff即0到32767之间的随机数
rand()/(RAND_MAX+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.
1、功能:
产生0到1之间均匀分布的一个随机数
2、方法说明:
设m=216,产生产生0到1之间均匀分布的一个随机数的计算公式如下:
ri=mod(2053ri-1
+13849,m),i=1,2,3……
pi
=ri/m
例:连续产生10个0到1之间均匀分布的一个随机数 。r的初值取5.0
#include "stdio.h"
double rnd1(double *r)
{ int m;
double s,u,v,p;
s=65536.0; u=2053.0; v=13849.0;
m=(int)(*r/s); *r=*r-m*s;
*r=u*(*r)+v; m=(int)(*r/s);
*r=*r-m*s; p=*r/s;
return(p);
}
main()
{ int i;
double r;
r=5.0;
printf("\n");
for (i=0; i<=9; i++)
printf("%10.7lf\n",rnd1(&r));
printf("\n");
getch();
}方法二:
float
b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);
注释:
stdlib.h头文件中有宏#define
RAND_MAX
0x7fff
rand()产生一个0到0x7ffff即0到32767之间的随机数
rand()/(RAND_MAX+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.
展开全部
用stdlib.h中的随机数产生器。当然还要#include
首先srand(time(NULL));种随机数种子。然后用算式float
result=rand()%256;rand()是产生一个介于0到256的随机数的函数。
首先srand(time(NULL));种随机数种子。然后用算式float
result=rand()%256;rand()是产生一个介于0到256的随机数的函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以写一个函数,利用math.h中的rand来产生随机浮点数。
#include
#include
#include
//
精度0.001的随机浮点数
float
randf()
{
return
(float)(rand()
%
1001)
*
0.001f;
}
main()
{
int
i;
for
(i=0;
i<100;
++i)
printf("%.3f\n",
randf());
system("pause");
}
有些书上说用rand得到的可能是负数。如果有出现负数的话,对rand得到的数取绝对值就可以了。
#include
#include
#include
//
精度0.001的随机浮点数
float
randf()
{
return
(float)(rand()
%
1001)
*
0.001f;
}
main()
{
int
i;
for
(i=0;
i<100;
++i)
printf("%.3f\n",
randf());
system("pause");
}
有些书上说用rand得到的可能是负数。如果有出现负数的话,对rand得到的数取绝对值就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询