[ js ] chrome 的 Math.random() 好固定的感覺

作者: art1 (人,原來不是人)   2017-06-25 16:08:55
不確定這問題該在哪一板問
同樣的程式碼在 firefox 上跑,還沒遇過兩次都一樣的結果
今天第一次用 chrome portable 測試,不管怎麼重新整理第一筆資料永遠都是同一筆
第二筆到第四筆則都是那幾筆資料在那邊輪流,更後面的就懶得觀察了
function rdm () {
return (Math.random() > 0.5 ? 1 : 0)
}
dataArray.sort(rdm)
google 後有看到 google 宣稱已經修復不夠隨機的問題了,不知道問題出在哪
把中斷點設在這兩個地方,也看不出來為什麼結果會不夠隨機
明明資料才 125 個而已,難道會是 portable 版本的問題嗎?
作者: s25g5d4 (function(){})()   2017-06-25 17:56:00
sort 不是這樣用的...
作者: eight0 (欸XD)   2017-06-25 19:12:00
我猜你想找的東西是 array shuffle
作者: bibo9901 (function(){})()   2017-06-25 22:26:00
去讀sorting的演算法 這做法是錯的
作者: cybelia (@@)   2017-06-26 00:34:00
這段程式說的是... dataArray要有大約一半排在前面,
作者: art1 (人,原來不是人)   2017-06-26 00:34:00
看了別人對 -1、0、1的解釋,改成 1: -1 就正常了
作者: cybelia (@@)   2017-06-26 00:35:00
大約一半排在後面,但沒有要求這一半裡面要怎麼排啊 ?_?這樣跟文中描述的用途好像不太一樣...
作者: art1 (人,原來不是人)   2017-06-26 00:39:00
是想讓陣列裡面的資料順序不要一直重複,是不太懂為什麼在chrome 的結果跟 firefox 有明顯差距,只好當成sort的實作不一樣,在找到改成 -1 的解法之前,也用了另一個打散順序的方式,雖然那個方式的程式碼比較多一些
作者: cybelia (@@)   2017-06-26 00:57:00
js的排序沒有定義相同時怎麼辦,這樣寫如果遇到sort實作是stable時,會蠻重覆的...當然ff跟chrome當前版本(印象中)都unstable啦,但依賴實作的特性不會感覺毛毛的嗎... O_O
作者: LPH66 (-6.2598534e+18f)   2017-06-26 05:40:00
用 sort 洗牌只有一個方法是正確的就是給每個元素一個亂數值, 然後依照那個亂數值排序用隨機傳比較結果的問題在於回傳結果是不一致的同樣兩個元素可能這一次是 1 下一次是 -1也就是不符合所謂的「全序性」, 會排出什麼是不可預料的
作者: art1 (人,原來不是人)   2017-06-26 07:22:00
就是想要那個不可預料,但chrome卻一直變成可預料...
作者: cybelia (@@)   2017-06-26 19:07:00
我想LPH大大的不可預料指的不是隨機吧....XD
作者: xdraculax (首席怪叔叔)   2017-06-26 21:13:00
只有我覺得原PO的隨機想法其實沒問題嗎 @@
作者: s25g5d4 (function(){})()   2017-06-26 21:21:00
只有你
作者: ssccg (23)   2017-06-26 21:31:00
用sort不會是隨機分布,每個元素的最終位置分布的機率會受開始位置影響,而且用sort複雜度還比較高,大有問題更不用說實際上還會受到不同瀏覽器的sort實作影響https://bost.ocks.org/mike/shuffle/compare.htmlhttps://goo.gl/p0Mo Firefox也一樣不均,只是沒那麼明顯

Links booklink

Contact Us: admin [ a t ] ucptt.com