随机数产生??

Oscarming 2007-03-26 04:28:28
请问如何用C语言产生一个float型(任意大小)的随机数?
...全文
388 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_anthony 2007-03-29
  • 打赏
  • 举报
回复
float是4字节32位的类型,也就是说只要设法产生一个32位的随机数就可以了。
rand()可以产生0-32767之间的随机整数,也就是15位的随机数,所以需要使用三次rand()来获得一个任意随机的float型。

程序入口执行一次srand((int)time(NULL));
然后用以下语句取得:
float fRnd;
unsigned long *piRnd = (unsigned long*)&fRnd;

*piRnd = (((unsigned long)rand())<<30)
| (((unsigned long)rand())<<15)
| ((unsigned long)rand())

这样,如果不考虑rand()前后两个数的算术联系,fRnd的内容就是float的随机数了。
believefym 2007-03-27
  • 打赏
  • 举报
回复
楼上的年轻高手,因为循环执行的速度是非常快的,每次的srand(time(0));基本都是在一个时间点上,所以产生的10列随机数序列都是一样的,取到的位置是不变的。

再向各位高手说明一下我的问题,我想产生一系列的float型随机数,值最好有差异,取值也不要局限在某个范围中
-------
设置种子以后就不关种子的事了,楼主这个解释不成立的,for循环也没有多次设置种子

产生两个范围的随机int相除
Aaron_Jerry 2007-03-27
  • 打赏
  • 举报
回复
总得有个上下限把。 任意大好象不可能把

Oscarming 2007-03-27
  • 打赏
  • 举报
回复
楼上的年轻高手,因为循环执行的速度是非常快的,每次的srand(time(0));基本都是在一个时间点上,所以产生的10列随机数序列都是一样的,取到的位置是不变的。

再向各位高手说明一下我的问题,我想产生一系列的float型随机数,值最好有差异,取值也不要局限在某个范围中
chensanniang 2007-03-26
  • 打赏
  • 举报
回复
我是初中生,不会,还得向楼主学习,问:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(void)
{ int a;
srand((int) time(0));
for( a=1;a<10;a++)
printf("%d\n",rand());
}
每次运行时,为什么第一个数总是相差只有一点.
yd711 2007-03-26
  • 打赏
  • 举报
回复
那位能不能私把rand()函数给小弟说一下,本人刚知道是随机产生的数,但不知道是几位的。如:
int a;
a=rand();
有时看是a=rand()/10
wflyfox 2007-03-26
  • 打赏
  • 举报
回复
rand()/123.456
iambic 2007-03-26
  • 打赏
  • 举报
回复
bits 2 float

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧