HTML代码中的Javascript:随机数不均匀分布

时间:2018-05-27 13:56:58

标签: javascript random

我遇到了以下问题: 我正在使用Python上传关于amazon mturk的调查,调查是通过HTML和javascript完成的。我向参与者展示了三个不同版本的调查之一,我通过javascript生成随机数来选择。我将号码存储在本地存储中,以防止刷新网站重置。我发现的问题是更多的人似乎得到版本1而不是版本3.但是当我在线运行Tryit编辑器中的代码时,我无法为自己重新创建问题。

你能帮我理解(并修复)为什么会这样吗?以下是我上传的(修剪过的)HTML代码。我更换了文字并删除了绒毛,如果你想看原版,请注意。非常感谢你!

<HTMLQuestion xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2011-11-11/HTMLQuestion.xsd">
<HTMLContent><![CDATA[
<!-- YOUR HTML BEGINS -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
<script type='text/javascript' src='https://s3.amazonaws.com/mturk-public/externalHIT_v1.js'></script>
<script>
function test(){
    document.getElementById('txt-field').value = "1";
}
</script>
</head>
<body>
<form name='mturk_form' method='post' id='mturk_form' action='https://www.mturk.com/mturk/externalSubmit'><input type='hidden' value='' name='assignmentId' id='assignmentId'/>
  <span>
<INPUT TYPE="text" NAME="link_click" id='txt-field' value="0" style="display: none">    
<div><h3><a href="www.google.com" target="_blank" id='report420' onclick="test()" >link</a></h3>
Instructions</div>
<div><table border="1" style="height: 258px;" width="196"><tbody>Table</tbody></table></div>
</span>
<!--I think the relevant part starts here-->
<script> 

document.write("Miscellaneous question");

var i = localStorage.getItem('i') || Math.floor(3*Math.random());
localStorage.setItem('i',i);

if (i==0){
document.write("Version 1");
}
if (i==1){
document.write("Version 2");
}
if (i==2){
document.write("Version 3");
}
document.write("Miscellaneous question");

</script>
<p><input type='submit' id='submitButton' value='Submit' /></p></form>
<script language='Javascript'>turkSetAssignmentID();</script>
</body></html>
<!-- YOUR HTML ENDS -->
]]>
</HTMLContent>
<FrameHeight>600</FrameHeight>
</HTMLQuestion>

1 个答案:

答案 0 :(得分:1)

随机函数Math.floor(3*Math.random())具有均匀分布,但我不认为400个样本已足够,以便您可以看到它的实际效果(如@desoares所述)。

测试代码:

&#13;
&#13;
var count = [0, 0, 0];
var n = 1000000;
document.write('Testing for ' + n + ' samples : ');
for (var i = 0; i < n; i++) {
    count[Math.floor(3*Math.random())]++;
}

document.write(JSON.stringify(count));
&#13;
&#13;
&#13;

&#13;
&#13;
var count = [0, 0, 0];
var n = 400;
document.write('Testing for ' + n + ' samples : ');
for (var i = 0; i < n; i++) {
    count[Math.floor(3*Math.random())]++;
}

document.write(JSON.stringify(count));
&#13;
&#13;
&#13;

此外,如果您想确保来自同一台计算机的用户不必使用相同的版本,则应在提交时清除已保存的变量localStorage.removeItem('i');。您还可以添加到期机制。

相关问题