我们都知道好老Math.random()
。它返回0到1之间的随机浮点数。
我似乎无法找到任何证据,如果零或一个是排他性或包容性的。
我知道如果它们具有包容性,那么击中其中任何一个值的可能性就会非常低。
但是我不禁想知道我是否应该浪费if语句来寻找它。
在我目前的情况中,零不是问题,但一个是。
var __rand:uint = Math.floor( Math.random() * myArray.length );
var result:String = myArray[__rand];
如果Math.random()
中的1是独占的,那么我将知道永远不会是1,因此__rand永远不能等于myArray.length
并且应该始终低于它...但是只是不确定如果我应该考虑它,我是否应该在一些性能关键代码中浪费时间。
PS:上面的代码不是性能关键代码,只是一个例子
基本上,只有两个简单的问题。 1)返回一个不可能或不可能。 2)如果可能,是否值得考虑。
答案 0 :(得分:6)
根据docs:
返回伪随机数n,其中0 <= n <1。这个号码 返回是以未公开的方式计算的,并且是 “伪随机”因为计算不可避免地包含一些 非随机性的元素。
所以它可以是0而不是1.你不必担心索引越界。
顺便说一下,如果这是真正的性能关键代码,那么最好不要将值转换为int或uint,而不是使用Math.floor(参见this performance test)。
答案 1 :(得分:4)
Math.random将返回介于0和(1独占)之间的数字。永远不会返回1。