学生会未来展望怎么写:C语言产生0-1000000的随机数?

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 17:24:52
j=(int)(n*rand()/RAND_MAX)
用这种办法可以产生比较小范围的随机数如0-100,但是当n〉32767时,这种方法就会失效。应该如何做呢?
我printf出来的RAND_MAX都为32767。这很明显的小于1000000。
(int)((double)rand() / ((double)RAND_MAX + 1) * N);这里面只有一个变量rand(),其他都是定值,而这个唯一的变量只能在0-32767之间随机,也就是说只有32768个数字,不论N多大,最后随机的数目还都是32768个啊,不知道我说的对不对。
经过我的测试,在linux下的随机数是很大的,可以直接%N。求教在win下面实现任意范围随机数的程序。

直接的方法是:
rand() % N;
返回从 0 到 N - 1 的数字(你就要把N设置为1000001)。但这个方法不好,因为许多随机数发生器的低位比特并不随机。一个较好的方法是:
(int)((double)rand() / ((double)RAND_MAX + 1) * N);
如果你不希望使用 double,另一个方法是:
rand() / (RAND_MAX / N + 1);
两种方法都需要知道 RAND_MAX,而且假设 N 要远远小于 RAND_MAX。ANSI 规定标准头文件 stdlib.h 中包含 RAND_MAX 的 #define。顺便提一下,RAND_MAX 是个常数,它告诉你 C 库函数 rand() 的固定范围。你不可以设 RAND_MAX 为其它的值,也没有办法要求 rand() 返回其它范围的值。如果你用的随机数发生器返回的是 0 到 1 的浮点值,要取得范围在 0 到 N - 1 内的整数,只要将随机数乘以 N 就可以了。

太大了,长整型也不够用

把变量定为双精度就可以了