如果我的字符串非常短,请说(JavaScript):
var = "abcd";
我想从中获取一个随机字符,我可以使用:
var random_char = str.charAt( Math.floor(Math.random() * str.length) );
现在Math.floor(Math.random() * str.length)
会返回[0..3]
范围内的随机数。
通过乘以字符串,即通过有效地增加随机数的范围,可以增加返回字符的感知随机性吗?
var = "abcdabcdabcdabcdabcdabcd";
答案 0 :(得分:4)
这不会改变任何事情。 Math.random()
返回[0..1)
之间的伪随机值。假设随机数生成器具有良好的质量,无论您将其范围映射到abc
还是abcabcabc
,都没有区别。
如果Math.random()
返回非常低质量的随机数(即人类只能通过查看数字序列就可以发现它们背后的逻辑),那么您的策略确实会增加感知“随机性”。但这并不相关,因为JavaScript运行时通常不是由猴子编写的。
答案 1 :(得分:3)
我会说不。获得a,b,c或d的概率仍为25%。
答案 2 :(得分:3)
不,它不能。更糟糕的是,您将在12.5%的时间内收到错误,因为Math.round
会将值从3.5到3.999999舍入为4。