我有4个整数,我想将其转换为种子以生成随机数。我知道这在大多数情况下都是随意的,但是我确实想确保我目前所做的并不是过度杀戮(或者在种子值中没有产生足够的传播)。
我有大约1000个对象,我想根据它们的一些变量获得随机属性。
两个变量是常量并且在0到1000范围内并且对于每个对象是随机的,可以发生重复但是根本不可能(constant1
和constant2
)。通过程序的运行,其他两个变量在长时间段内以1的增量变化,从0开始,可以在有符号的int32范围内的任何位置,但往往在-100和100之间(variable1
和{ {1}})。
如何从这4个值中适当地生成种子?
答案 0 :(得分:0)
在初始化类实例时,您应该只初始化Random
生成器一次,因此您应该只使用其中的2个属性(其他2个默认设置为0,不是&t; t他们?)获得种子。
由于1.并且假设constant1
和constant2
默认在0-1000之间是随机的,您可以使用constant1 * 1000 + constant2
获取0到1000000之间的随机数。我不确定随机性分布,但它应该足以获得种子。
<强>更新强>
如果你真的需要让种子依赖于其他两个变量,你可以按照以下模式进行:
var seed = ((variable1 * 200 + variable) * 1000 + constant1) * 1000 + constant2;
但是因为它超出Int32
范围,您必须在unsafe
上下文中执行此操作,以防止OverflowException
被抛出。
最后一件事:我并非100%确定它会为您提供生成值的标准化分布。