Jump to content

celus

Members
  • Posts

    3
  • Joined

  • Last visited

celus's Achievements

Newbie

Newbie (1/7)

1

Reputation

  1. Hello Thanks for your answer. The script you posted shows an equal distribution, that's true. I tried changing it the following way to spot the difference of your script and mine: I moved the line var points = ... in the loop: var a, i, j var result = [0, 0, 0, 0, 0, 0, 0, 0, 0]; for(i = 0; i < 1000000; i++) { var points = [1, 0, 0, 0, 0, 0, 0, 0, 1]; a = points.sort(s); for(j = 0; j < a.length; j++) { result[j] += a[j]; } } document.getElementById("demo").innerHTML = result.join(", "); function s(a, {return 0.5 - Math.random()} It seems in the line a = points.sort(s); the Array points gets changed. I wanted to reset it every time the outer loop repeates itself.
  2. Hi everybody I'm not saying the Math.random() function isn't random enough. (I should have posted my text under suggestions.) I think the different browsers have different sorting algorithms in the background. Even if the random number generator is good, the sorting algorithm of most browsers doesn't treat all numbers in the array the same. As it seems to me, in most browsers the last element of the array is inserted/sorted last. Now if we define the sorting function e.g. as a < b, if the last element in the array is the smallest, it moves through the whole array. But if we define it as Math.random()<0.5, it is unlikely that the last element will move far from its place. Of course this depends on the sorting algorithm in the background. That's why I tested it with different browsers. Of course I executed my script many times. If the sorting is tested for 100'000 times, the results show the same problem.
  3. Hi everybody http://www.w3schools.com/js/js_array_sort.asp If I'm right, the JS-Tutorial about sorting arrays randomly has a lack. The order of the array is kind of in a random order at the first glance, but the elements often stay at the same place as they were. This is true in the most for the element at the end of the array and the effect happens in most browsers, but not in all of them. I've written a script to test this. In these browsers the elements are not evenly distributed as they should: Chrome, IE, Edge, Opera. In Safari they were evenly distributed when I tried it. Try it yourself. <!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var sum; var points; var i, j; sum = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; for (i=0;i<1000;i++){ points = [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]; points.sort(function(a, {return 0.5 - Math.random()}); for (j=0;j<points.length;j++){ sum[j]+=points[j]; } } document.getElementById("demo").innerHTML = sum; </script> </body> </html> What the code does: It creates an array with a leading 1 and a 1 at the last place and zeroes between (points). Then it sorts this array randomly and adds the resulting array to a sum array. Then it starts again with the specific array. The generating, sorting and adding is done a 1000 times. When you reload the page the summed up numbers are displayed. Result: In many browsers the last number is higher than the others, which shouldn't happen with correct random sorting. Cheers, celus
×
×
  • Create New...