擲硬幣

真隨機,而且附上累計統計讓你自己核對。

本機處理

按「擲出」。每一次都用你作業系統的密碼學隨機來源。

完全在你的瀏覽器裡執行 —— 打開開發者工具的 Network 分頁就能驗證

按一下就出現正面或反面。真正值得問的不是「網頁能不能顯示一個隨機的詞」,而是這枚硬幣到底公不公正、以及你有沒有辦法查證。這一頁會保留每一次結果並即時顯示統計,讓答案不再取決於你願不願意相信我們。

隨機到底從哪裡來

每一次擲出都從瀏覽器的 crypto.getRandomValues 取一個位元。那是一個密碼學安全的偽隨機產生器,由作業系統用硬體熵源持續播種與再播種 —— 時序抖動、中斷模式,以及現代處理器上一道專門取樣熱噪音的指令。

日常的替代品是 Math.random。在 Chrome 與 Edge 內的 JavaScript 引擎 V8 裡,Math.random 是 xorshift128+。它很快,統計性質對繪圖和遊戲來說也夠用,但它不是不可預測的:只要觀察到一小段連續輸出,就能還原內部狀態,然後把後面每一個值都算出來。如果這枚硬幣只是決定誰付晚餐錢,沒人在意;如果它決定的是比賽誰先發、或是兩個人裡誰拿到一個名額,那個差別就是全部的重點。

這一頁沒有「種子」欄位,那是刻意的,不是漏做。密碼學來源在設計上就沒有可重現的種子 —— 熵是持續混進去的,而且從不對外暴露。一個你看得到的種子,就是別人也猜得到的種子;而那正好是「公正性有意義時」你最不想要的性質。

怎麼判斷一枚硬幣公不公正

不是看比例。這是大家想要稽核隨機來源時最常犯的一個錯。20 次裡 13 比 7,感覺很不對,其實完全正常:公正硬幣在 n 次裡出現正面的次數,標準差是 n 的平方根除以二,所以 20 次在 10 的上下擺盪大約 2.2 次是家常便飯。

該問的是「離中間值幾個標準差」。這一頁的統計面板會隨著次數累積替你算出來。大約 2 個標準差以內完全不需要解釋。反過來說,每次都剛好落在 50% 的來源才可疑 —— 因為那不是隨機的樣子,那是計數器的樣子。

另一個值得看的是最長連續。人普遍嚴重低估連續會有多長。在 100 次公正的投擲裡,同一面連續出現六、七次一點都不稀奇,連續五次幾乎必然發生。一個從不出現連續的來源,是「沒做到隨機」而不是「做到了公正」。

擲硬幣真正適合用在哪裡

擲硬幣是最乾淨的平手決勝方式,因為雙方都看得到沒有人能影響它。真正在起作用的是那個透明度 —— 硬幣本身的公正性,其實遠不如「兩邊都沒有選擇結果」這件事重要。這也是這一頁的累計統計不只是裝飾的原因:它是讓整個過程可被稽核、而不只是被宣稱的那一部分。

它不適合超過兩種結果、或結果本來就不該等機率的場合。反覆擲來縮小四個選項是可行的,但如果提早停手,機率就被扭曲了。要從一個範圍裡挑、或一次要抽好幾個,請改用隨機數產生器 —— 那樣每個選項的機率才會完全相同。

這一頁支援「一次擲好幾枚」,但那回答的是跟「一枚擲好幾次」不同的問題。一次擲十枚是一個分布的快照;跨很多輪累積起來的總計才是那個分布本身。兩個都會顯示,而且它們不能互相取代。

你擲出的任何東西都不會離開這一頁

按下按鈕不會產生任何請求。位元來自你自己的機器,累計數字住在這個分頁的記憶體裡,分頁一關就沒了。沒有任何結果被記錄在伺服器上 —— 這也代表沒有任何結果可以在事後被拿出來當成什麼的證據。

這件事十秒就能查證,不必用信任來換。打開瀏覽器的開發者工具切到 Network 分頁,然後想擲幾次就擲幾次,那份清單會一直是空的。這個網站也會送出把網路連線限制在自己來源的 Content-Security-Policy,執行它的是你的瀏覽器,不論我們的程式做什麼都一樣。

常見問題

這枚硬幣真的公正,還是「差不多」?

是嚴格意義上的公正:每一次擲出從你作業系統的密碼學隨機來源讀一個位元,兩種結果的機率完全相同。過程裡沒有四捨五入、也沒有取模運算,所以沒有讓偏差鑽進來的縫。累計統計放在那裡,就是為了讓你查證而不是相信。

為什麼不是剛好 50/50?

因為公正的硬幣本來就不會。n 次裡正面的次數大約以 n 的平方根除以二的幅度擺盪,所以短期波動很大、長期收斂很慢。統計面板會把你的結果換算成「幾個標準差」,那才是真正能告訴你有沒有問題的數字。

可以看到或設定種子嗎?

不行,而那正是重點。密碼學隨機來源沒有可重現的種子 —— 熵持續混入且從不暴露。一個看得到的種子就是一個可被預測的種子。如果你需要可重現的偽隨機來跑模擬,那是另一種需求、要用另一種工具。

為什麼不直接用 Math.random?

因為它的內部狀態可以從一小段輸出還原,之後的結果就變得可預測。這對遊戲無所謂,對「有人有動機事先知道答案」的場合則是致命的。

我的投擲紀錄會被存起來嗎?

只存在這個分頁的記憶體裡,而且只到你關掉或重新整理為止。沒有任何東西被送到伺服器,也沒有任何東西被寫到磁碟。

可以離線使用嗎?

第一次造訪之後可以。頁面會被瀏覽器快取,而隨機來自你的作業系統而不是網路 —— 根本沒有需要連線的地方。