c语言生成0到1的随机浮点数,我知道2种方法,哪种更好一些呢。

第一种rand()*1.0/RAND_MAX
第二种(rand()%1000001)/1000000
都是精确到小数点后6位的。

第一种更好。因为rand的范围是到RAND_MAX VC里面他的定义是32767
所以第二种会限于0~0.032767之间 这显然不符合要求追问

那假设我不要那么高的精度呢,比如只要3位小数
而且RAND_MAX我的系统里是0x7fff,你的32767是不是都过时了啊
现在不都是4位了

追答

0x7fff就是32767嘛。。。十六进制和十进制。你是觉得第二种方法容易取精度吧。我个人感觉取整操作使得概率有细微的不平均。比如骰子6个数平均出现,现在要0~4范围,/5取整对吧。然后0~4的概率就变成1:2:1:1:1
1=》1
2=》2
3=》3
4=》4
5=》0
6=》1
1出现2次。。当然在32767里面他的影响很小。

追问

我说错了是0x7FFFFFFF,4位的
32767是2位的,不过现在都4位了吧
我个人觉得第二种好些吧
不过仔细研究确实不是绝对的随机,有一些数概率大一点点

追答

道理你也明白,编程都在咱们自己,想怎么写就怎么写是吧。我查了确实是32767。应该是老C库的定义。以你自己的编译器为准

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-25
一种方法是用当前时间作种子,示例如下:int nSeed=time();srand(nSeed);然后你rand()两个整数让它们相除即可
相似回答
大家正在搜