我想为每个访问者分配一个随机数字,以启用 A/B 测试等功能。我还想在客户端生成数字,而不是在服务器上生成数字。而且因为它应该很快我想使用 Math.random()
我现在的问题如下:我是否得到随机分布的数字,或者不同的实现会扭曲数字?
干杯瓦伦丁
我想为每个访问者分配一个随机数字,以启用 A/B 测试等功能。我还想在客户端生成数字,而不是在服务器上生成数字。而且因为它应该很快我想使用 Math.random()
我现在的问题如下:我是否得到随机分布的数字,或者不同的实现会扭曲数字?
干杯瓦伦丁
一般来说,客户端的“Math.random()”的实现对于随机分布以及生成它们的服务器来说应该足够好。但你不能确定。
您可以使用下面的javascript来测试javascript的Math.random的有效随机分布:
var totalAbove =0;
var totalBelow = 0
for(var i=0;i<10000;i++){
var randomNumber = Math.ceil(Math.random()*1000)
if(randomNumber > 500){
totalAbove++
}else{
totalBelow++
}
}
var belowSplit = (totalBelow / 10000) * 100
var aboveSplit = (totalAbove / 10000 ) * 100
alert("Above 500: " + totalAbove + "\n" + "Below 500: " + totalBelow + "\n split: " + belowSplit + "/" + aboveSplit);
或使用这个jsfiddle:http: //jsfiddle.net/VN3Bd/
您可以在不同的浏览器上尝试它,看看它的行为是否不同,但我认为您会发现分布非常均匀。
我认为您可以依靠 Math.random 来完成这项工作。