扩展rand()最大范围

Fra*_*zzi 5 c++

我创建了一个测试应用程序,可以生成0到250 000范围内的10k随机数.然后我计算出MAX和min值,并注意到MAX值总是在32k左右......

你知道如何扩大可能的范围吗?我需要一个MAX值约为250 000的范围!

Hei*_*nzi 9

这是根据rand()的定义,参见:

http://cplusplus.com/reference/clibrary/cstdlib/rand/

http://cplusplus.com/reference/clibrary/cstdlib/RAND_MAX/

如果您需要更大的随机数,您可以使用外部库(例如http://www.boost.org/doc/libs/1_49_0/doc/html/boost_random.html)或从多个小随机数中计算大型随机数数字由你自己.

但要注意你想要的分配.如果只是总结小的随机数,结果将不会平均分配.

如果您只是按常数因子缩放一个小的随机数,则可能的值之间会有间隙.

取随机数的乘积也不起作用.

可能的解决方案如下:

1) Take two random numbers a,b
2) Calculate a*(RAND_MAX+1)+b
Run Code Online (Sandbox Code Playgroud)

因此,您可以获得均匀分布的随机值,最高可达(RAND_MAX + 1)^ 2-1

  • 该产品也不是线性的.你的最后一个解决方案应该是'a*(RAND_MAX + 1)+ b`.(它适用于"[0,(RAND_MAX + 1)*(RAND_MAX + 1))"范围内的随机值,前提是没有溢出. (3认同)