【发布时间】:2016-03-15 02:27:47
【问题描述】:
在 Go 中生成固定长度随机数的最快和最简单的方法是什么?
假设要生成 8 位长数字,rand.Intn(100000000) 的问题是结果可能远小于 8 位,并且用前导零填充它对我来说似乎不是一个好的答案。
也就是说,我更关心随机性的质量,就其长度而言。所以我在想,对于这个特定的问题,以下是最快和最简单的方法吗?
99999999 - rand.Int63n(90000000)
即,我猜Int63n 可能比Intn 更适合我的情况。是真的,还是只是一厢情愿?关于全 8 位的随机性,两者是一样的,还是真的有一个比另一个好?
最后,还有什么比上面更好的方法吗?
更新:
请不要提供low + rand(hi-low) 作为答案,众所周知。它相当于我现在正在做的事情,它并没有回答我真正的问题,“关于完整 8 位数字的随机性,两者是否相同,或者真的有一个比另一个更好?"
如果没有人能回答这个问题,我会在两者之间绘制一个二维散点图并找出自己......
谢谢
【问题讨论】:
-
您的用例是什么?对我来说,您似乎想要一个由 8 位数字组成的字符串,而不是一个数字本身?这个答案可能会有所帮助:stackoverflow.com/questions/22892120/…
-
@Ezra,这个问题实际上是受到那个问题的启发,尽管性能改进了几次迭代,但仍然无法摆脱那个循环。是的,我确实想要由 8 位数字组成的字符串,而不是数字本身。即使是十六进制数字也适合我。关键是,我上面的解决方案可以一次性完成,我相信这会比那里最快的解决方案快得多,这远非简单。
-
用零填充没有什么问题:一个随机数如果填充后可能以一个或多个零开头,并且仍然是完全随机的。
-
@Volker,我个人的口味没有什么不想要的填充物。您可能喜欢
00000023,甚至00000004作为答案,但我个人不喜欢。我已经已经在 OP 中清楚地说明了这一点,所以我看不出你争论的重点——这一切都归结为个人品味,所以请不要强迫别人。跨度> -
如果我伤害了你的感情,请原谅。我只是不知道随机数更多的是品味问题而不是数学问题。对不起。