Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Math.random()返回非常相似的值_Javascript_Reactjs_Math - Fatal编程技术网

Javascript Math.random()返回非常相似的值

Javascript Math.random()返回非常相似的值,javascript,reactjs,math,Javascript,Reactjs,Math,所以我有位置:绝对的元素,然后我使用Math.random()设置它们的左:#random和上:#random位置 然而,一件非常奇怪的事情正在发生。它应该是完全随机的,因此它们应该完全随机放置。然而,它们一次又一次地紧密地放在一起。而不是被分开 然而,你可以清楚地看到,他们的位置确实是随机的: 以下是我用来生成它们的代码: const Clouds = function(props) { const clouds = [] for (let i = 0; i < pr

所以我有位置:绝对的元素,然后我使用Math.random()设置它们的左:#random和上:#random位置

然而,一件非常奇怪的事情正在发生。它应该是完全随机的,因此它们应该完全随机放置。然而,它们一次又一次地紧密地放在一起。而不是被分开

然而,你可以清楚地看到,他们的位置确实是随机的:

以下是我用来生成它们的代码:

const Clouds = function(props) {
    const clouds = []
    for (let i = 0; i < props.cloudNum; i++) {
        const style = {
            position: 'absolute',
            height: 50 * props.cloudSize + 'px',
            top: Math.random() * 100 + '%',
            left: Math.random() * 100 + '%',
        }
        clouds.push(<Cloud key={i} style={style} />)
    }
    return <div className={props.side}>{clouds}</div>
}
const Clouds=函数(道具){
常数云=[]
for(设i=0;i

Math.random是否有时间成分,因为它们是按顺序生成的,所以它们的随机数是相似的?

没有时间成分——它只是由系统生成的。解释它的好线索。随机算法取决于JavaScript引擎(该线程中有一个V8答案),但该函数始终生成一个介于0和1之间(包括0和1)的浮点数。您的代码生成了两个接近的数字,这是一个难以置信的巧合。

事实上,尽管它们看起来像相似的数字,但它们不是(请记住,您要乘以100),这意味着您的随机数空间从0到100(因为图形中的小数几乎没有值,就像您要求的那样)

请记住,如果你的空间是100朵云,只生成13朵云,那么两朵云占据相同位置的概率超过50%


巧合的是,您得到了类似的值。您可以尝试使用我的代码片段进行多次测试

请注意,我的对象比你的对象小得多,没有元素重叠会带来更好的随机性。IMHO,如果您正在生成云(取决于目的),那么最好使用

const container=document.getElementById('container');
常数云=函数(){

因为(设i=0;这是经常发生,还是只是偶尔发生?因为真正的随机数(不是那些由
Math.random()
生成的随机数是真正的随机数,但它们在大多数情况下应该足够好)会比人们天真地期望的“随机数”更频繁地“聚集在一起”数字。但是如果你说的值总是在一个很窄的范围内,比如说总是51.xxxx,而不是0-100之间的任何地方,那么这看起来确实很奇怪,我无法从给出的代码片段中解释。随机并不意味着平均分布。真正的随机数据应该有一些点聚集在一起,因为每个点都应该是相同的你被选中的机会均等。这是每次发生在特定的点范围内还是每次都会发生变化?Cryptobj.getRandomValues()是数学的替代品。随机试试这个我明白了。要回答@RobinZigmond,不,他们并不总是51岁左右。只是有很多次。但你们提出了一个很好的观点。我可能只是误解了随机的意思。很抱歉,我应该更好地解释它。这种情况不断发生。我会尝试使用柏林噪音e、 谢谢!:)不过,即使使用您的代码片段,在“单个”上获取大多数对象也是很常见的axis。这是一种扼杀:这并不像你想象的那么普遍,而且随着容器大小的增加,这种情况就不那么普遍了。这与上面提到的生日问题有关。如果你不想要类似的坐标系,最好使用分布算法,而不是随机生成器。我应该说,这种情况一直在发生。这里是另一个例子充足的: