Menghasilkan angka acak secara manual

30

Bagaimana saya dapat secara manual menghasilkan nomor acak dari distribusi yang diberikan, seperti misalnya, 10 realisasi dari distribusi normal standar?

Dan ish
sumber
10
Bisakah Anda menjelaskan mengapa Anda ingin melakukan ini dan kendala apa yang ada pada Anda?
mdewey
2
Anda bisa mendapatkan tabel angka acak (rand digunakan untuk menerbitkannya antara lain).
Batman
4
@ Batman: ya memang dan buku RAND dari 10⁶ angka acak mendapat 655 komentar di Amazon. Semua bisa ditebak tentunya.
Xi'an
10
(Saya terkejut bahwa tidak ada yang berkomentar sebelumnya). Kecuali itu benar - benar pada dasarnya orang tidak boleh mencoba menggunakan implementasi kustom untuk menghasilkan angka acak. Ya, senang mengetahui bagaimana melakukannya dan mungkin hal pertama yang akan Anda tunjukkan dalam kelas " Metode MC " (dan itu hebat!) Tetapi jangan lakukan itu dalam proyek kehidupan nyata. Ada rutinitas pembuatan nomor acak khusus karena suatu alasan, menerapkan algoritma inti dari awal adalah hilangnya waktu, sumber bug, dan upaya kesadaran lapangan yang buruk.
usεr11852 mengatakan Reinstate Monic
2
@ Xi'an: Ya, saya setuju itu anggapan yang aman. Seperti yang disebutkan ini hanyalah komentar untuk mengingatkan orang agar tidak menggunakan RNG sendiri tanpa menyadari bahwa desain RNG adalah bisnis yang sangat serius. Untuk mengutip von Neumann : "Setiap orang yang menganggap metode aritmatika menghasilkan angka acak, tentu saja, dalam keadaan dosa."
usεr11852 mengatakan Reinstate Monic

Jawaban:

46

Jika "secara manual" termasuk "mekanis" maka Anda memiliki banyak opsi yang tersedia untuk Anda. Untuk mensimulasikan variabel Bernoulli dengan setengah probabilitas, kita dapat melempar koin: tetapi jika kita ingin memvariasikan parameter probabilitas Bernoulli atau variabel binomial ke nilai selain p = 0,5 , jarum Georges-Louis Leclerc, Comte de Buffon akan izinkan kami untuk melakukannya. Untuk mensimulasikan distribusi seragam diskrit pada { 1 , 2 , 3 , 4 , 5 , 6 } untuk ekor, 1 untuk kepala. Untuk mensimulasikan distribusi geometris kita dapat menghitung berapa banyak lemparan koin yang dibutuhkan sebelum kita mendapatkan kepala. Untuk mensimulasikan distribusi binomial, kita dapat melempar koin kita n kali (atau hanya melemparkankoin n ) dan menghitung kepala. The"quincunx" atau "mesin kacang" atau "kotak Galton"adalah alternatif yang lebih kinetik - mengapa tidakmenetapkan satu ke dalam tindakan dan lihat sendiri? Sepertinyatidak ada yang namanya "koin tertimbang"01nnp=0.5{1,2,3,4,5,6} kita menggulung dadu enam sisi. Penggemar permainan peran akan menghadapi dadu yang lebih eksotis , misalnya dadu tetrahedral untuk mencicipi secara seragam dari {1,2,3,4}, sementara dengan roda pemintal atau roulette orang bisa melangkah lebih jauh lagi. ( Kredit gambar )

Berbagai dadu

Apakah kita harus marah untuk menghasilkan angka acak dengan cara ini hari ini, ketika itu hanya satu perintah pada konsol komputer - atau, jika kita memiliki tabel nomor acak yang tersedia, satu perayapan ke sudut-sudut yang lebih berdebu dari rak buku? Yah mungkin, meskipun ada sesuatu yang menyenangkan mengenai percobaan fisik. Tetapi bagi orang yang bekerja sebelum Zaman Komputer, memang sebelum tersedia tabel angka acak skala besar (yang lebih belakangan), mensimulasikan variabel acak secara manual memiliki kepentingan praktis yang lebih praktis. Ketika Buffon menyelidiki paradoks St. Petersburg- permainan lempar koin yang terkenal di mana jumlah pemain menang dua kali lipat setiap kali kepala dilemparkan, pemain kalah pada ekor pertama, dan yang diharapkan pembayarannya kontra-intuitif tak terbatas - dia perlu mensimulasikan distribusi geometris dengan . Untuk melakukannya, tampaknya ia mempekerjakan seorang anak untuk melempar koin untuk mensimulasikan 2048 permainan dari permainan St Petersburg, merekam berapa banyak lemparan sebelum permainan berakhir. Distribusi geometrik yang disimulasikan ini direproduksi dalam Stigler (1991) :p=0.5

Tosses Frequency
1      1061
2      494
3      232
4      137
5      56
6      29
7      25
8      8
9      6

Dalam esai yang sama di mana ia menerbitkan penyelidikan empiris ini pada paradoks St. Petersburg, Buffon juga memperkenalkan " jarum Buffon " yang terkenal itu . Jika sebuah pesawat dibagi menjadi potongan-potongan dengan garis paralel jarak terpisah, dan jarum dengan panjang ld jatuh ke atasnya, probabilitas jarum melewati salah satu garis adalah 2 lld .2lπd

Eksperimen jarum Buffon

Jarum Buffon, oleh karena itu, dapat digunakan untuk mensimulasikan variabel acak atauXBinomialXBernoulli(2lπd), dan kita dapat menyesuaikan probabilitas keberhasilan dengan mengubah panjang jarum kita atau (mungkin lebih nyaman) jarak di mana kita mengatur garis. Alternatif penggunaan jarum Buffon adalah sebagai cara yang sangat tidak efisien untuk menemukan perkiraan probabilitas untukXBinomial(n,2lπd) . Gambar (kredit) menunjukkan 17 batang korek api, di antaranya 11 melewati batas. Ketika jarak antara garis aturan ditetapkan sama dengan panjang batang korek api, seperti di sini, proporsi yang diharapkan dari persimpangan korek api adalah 2π dan karenanya kita dapat memperkirakan π sebagai dua kali timbal balik dari fraksi yang diamati: di sini kita mendapatkan π =2172ππ^. Pada tahun 1901 Mario Lazzarini mengaku telah melakukan percobaan menggunakan 2,5 jarum cm dengan garis 3 cm, dan setelah 3408 kali lemparan diperoleh π =355π^=217113.1 . Ini adalah rasional keπ yang terkenal, akurat hingga enam desimal. Badger (1994) memberikan bukti yang meyakinkan bahwa ini adalah penipuan, tidak terkecuali bahwa untuk menjadi 95% percaya diri dari enam tempat desimal akurasi menggunakan peralatan Lazzarini, 134 triliun jarum yang harus dilarutkan dengan sabar harus dilempar! Tentunya jarum Buffon lebih berguna sebagai generator angka acak daripada sebagai metode untuk memperkirakanπ.π^=355113ππ


Generator kami sejauh ini sangat berbeda. Bagaimana jika kita ingin mensimulasikan distribusi normal? Salah satu opsi adalah untuk mendapatkan angka acak dan menggunakannya untuk membentuk perkiraan diskrit yang baik untuk distribusi yang seragam , kemudian melakukan beberapa perhitungan untuk mengubahnya menjadi penyimpangan normal acak. Roda pemintal atau roulette dapat memberikan angka desimal dari nol hingga sembilan; sebuah dadu dapat menghasilkan digit biner; jika kemampuan aritmatika kita dapat mengatasi basis yang lebih lucu, bahkan satu set dadu standar akan berhasil. Jawaban lain telah membahas pendekatan berbasis transformasi semacam ini secara lebih rinci; Saya menunda diskusi lebih lanjut sampai akhir.[0,1]

Pada akhir abad kesembilan belas utilitas dari distribusi normal sudah terkenal, sehingga ada ahli statistik yang ingin mensimulasikan penyimpangan normal acak. Tak perlu dikatakan, perhitungan tangan yang panjang tidak akan cocok kecuali untuk mengatur proses simulasi di tempat pertama. Setelah itu ditetapkan, generasi bilangan acak harus relatif cepat dan mudah. Stigler (1991) mendaftar metode yang digunakan oleh tiga ahli statistik era ini. Semua meneliti teknik penghalusan: penyimpangan normal acak sangat menarik, misalnya untuk mensimulasikan kesalahan pengukuran yang perlu dihaluskan.

Ahli statistik Amerika yang luar biasa, Erastus Lyman De Forest , tertarik untuk merapikan tabel kehidupan, dan menghadapi masalah yang membutuhkan simulasi nilai absolut dari penyimpangan normal. Dalam apa yang akan membuktikan tema berjalan, De Forest benar-benar mengambil sampel dari distribusi setengah normal . Selain itu, daripada menggunakan standar deviasi satu ( kita sebut "standar"), De Forest menginginkan "kemungkinan kesalahan" (deviasi median) salah satunya. Ini adalah formulir yang diberikan dalamtabel "Probabilitas Kesalahan"dalam lampiran "Manual Astronomi Bulat dan Praktis, Volume II" oleh William Chauvenet . Dari tabel ini, De Forest menginterpolasi kuantil dari distribusi setengah normal, dari p = 0,005 ke p =ZN(0,12)p=0.005 , yang ia anggap sebagai "kesalahan frekuensi yang sama".p=0.995

De Forest tabel kesalahan frekuensi yang sama

Jika Anda ingin mensimulasikan distribusi normal, mengikuti De Forest, Anda dapat mencetak tabel ini dan memotongnya. De Forest (1876) menulis bahwa kesalahan "telah ditorehkan pada 100 bit kartu-papan dengan ukuran yang sama, yang diguncang dalam kotak dan semua ditarik satu per satu".

Astronom dan ahli meteorologi Sir George Howard Darwin (putra naturalis Charles) melakukan hal yang berbeda, dengan mengembangkan apa yang disebutnya "roulette" untuk menghasilkan penyimpangan normal yang acak. Darwin (1877) menjelaskan bagaimana:

x720π0xex2dx++-

"Indeks" harus dibaca di sini sebagai "pointer" atau "indikator" (cf "jari telunjuk"). Stigler menunjukkan bahwa Darwin, seperti De Forest, menggunakan distribusi kumulatif setengah normal di sekitar disk. Selanjutnya menggunakan koin untuk melampirkan tanda secara acak menjadikan ini distribusi normal penuh. Stigler mencatat bahwa tidak jelas seberapa halus skala itu lulus, tetapi menganggap instruksi untuk secara manual menangkap putaran disk adalah "untuk mengurangi bias potensial terhadap satu bagian disk dan untuk mempercepat prosedur".

Sir Francis Galton , yang kebetulan setengah sepupu dari Charles Darwin, telah disebutkan sehubungan dengan quincunx-nya. Sementara ini secara mekanis mensimulasikan distribusi binomial yang, oleh teorema De Moivre-Laplace memiliki kemiripan yang mencolok dengan distribusi normal (dan kadang-kadang digunakan sebagai alat bantu pengajaran untuk topik itu), Galton sebenarnya menghasilkan skema yang jauh lebih rumit ketika ia ingin sampel dari distribusi normal. Bahkan lebih luar biasa daripada contoh-contoh tidak konvensional di bagian atas jawaban ini, Galton mengembangkan dadu yang terdistribusi normal- atau lebih tepatnya, satu set dadu yang menghasilkan perkiraan diskrit yang sangat baik untuk distribusi normal dengan deviasi median. Dadu ini, yang berasal dari tahun 1890, disimpan di Koleksi Galton di University College London.

Galton dadu normal

Dalam sebuah artikel tahun 1890 di Nature Galton menulis bahwa:

Sebagai instrumen untuk memilih secara acak, saya tidak menemukan yang lebih baik daripada dadu. Akan sangat membosankan untuk mengocok kartu secara menyeluruh antara setiap undian beruntun, dan metode mencampur dan mengaduk bola bertanda di dalam tas masih lebih membosankan. Sebuah teetotum atau beberapa bentuk roulette adalah lebih baik untuk ini, tetapi dadu lebih baik dari semua. Ketika mereka diguncang dan dilemparkan ke dalam keranjang, mereka meluncur dengan sangat berbeda satu sama lain dan terhadap tulang rusuk dari pekerjaan keranjang yang mereka terguling-guling dengan liar, dan posisi mereka pada awalnya tidak memberikan petunjuk yang jelas tentang apa yang akan mereka raih bahkan setelah goyang dan lemparan tunggal yang baik. Peluang yang diberikan oleh die lebih beragam daripada yang diperkirakan; ada 24 kemungkinan yang sama, dan tidak hanya 6, karena setiap wajah memiliki empat sisi yang dapat digunakan, seperti yang akan saya tunjukkan.

+114

Desain dadu normal Galton

Laboratorium untuk Percobaan Statistik Matematika Raazesh Sainudiin termasuk proyek siswa dari University of Canterbury, NZ, yang mereproduksi dadu Galton . Proyek ini mencakup penyelidikan empiris dari menggulirkan dadu berkali-kali (termasuk CDF empiris yang terlihat meyakinkan "normal") dan adaptasi skor dadu sehingga mereka mengikuti distribusi normal standar. Menggunakan skor asli Galton, ada juga grafik dari distribusi normal yang didiskritisasi yang benar-benar diikuti oleh skor dadu.

Distribusi diskrit dadu Galton


Dalam skala besar, jika Anda siap untuk meregangkan "mekanis" ke listrik, perhatikan bahwa epik RAND A Juta Digit Acak dengan 100.000 Normal Deviate didasarkan pada semacam simulasi elektronik dari roda roulette. Dari laporan teknis (oleh George W. Brown, awalnya Juni 1949) kami menemukan:

Karena termotivasi, orang-orang RAND, dengan bantuan tenaga teknis Douglas Aircraft Company, merancang roda elektro-roulette berdasarkan variasi proposal yang dibuat oleh Cecil Hastings. Untuk keperluan pembicaraan ini, deskripsi singkat sudah cukup. Sumber pulsa frekuensi acak diamankan oleh pulsa frekuensi konstan, sekitar satu kali per detik, memberikan rata-rata sekitar 100.000 pulsa dalam satu detik. Sirkuit standardisasi pulsa meneruskan pulsa ke penghitung biner lima tempat, sehingga pada prinsipnya mesin seperti roda roulette dengan 32 posisi, yang menghasilkan rata-rata sekitar 3000 putaran pada setiap belokan. Konversi biner ke desimal digunakan, membuang 12 dari 32 posisi, dan digit acak yang dihasilkan dimasukkan ke dalam pukulan IBM, menghasilkan tabel kartu dengan angka acak.

χ2tes frekuensi aneh dan genap mengungkapkan bahwa beberapa batch memiliki sedikit ketidakseimbangan. Ini lebih buruk di beberapa batch daripada yang lain, menunjukkan bahwa "mesin telah berjalan di bulan sejak tune up ... Indikasi berada di mesin ini membutuhkan perawatan yang berlebihan untuk menjaganya dalam kondisi prima". Namun, cara statistik untuk menyelesaikan masalah ini ditemukan:

Pada titik ini kami memiliki juta digit asli kami, 20.000 kartu IBM dengan 50 digit kartu, dengan bias ganjil genap yang kecil tetapi dapat dilihat diungkapkan oleh analisis statistik. Sekarang diputuskan untuk mengacak ulang tabel, atau setidaknya mengubahnya, dengan roulette kecil yang bermain dengannya, untuk menghilangkan bias ganjil-genap. Kami menambahkan (mod 10) digit di setiap kartu, digit demi digit, ke digit yang sesuai dari kartu sebelumnya. Tabel yang diturunkan dari satu juta digit kemudian dikenakan berbagai tes standar, tes frekuensi, tes seri, tes poker, dll. Jutaan digit ini memiliki tagihan kesehatan yang bersih dan telah diadopsi sebagai tabel acak acak RAND yang modern.

Tentu saja ada alasan kuat untuk meyakini bahwa proses penambahan akan bermanfaat. Secara umum, mekanisme yang mendasarinya adalah pendekatan membatasi jumlah variabel acak modulo interval unit dalam distribusi persegi panjang, dengan cara yang sama bahwa jumlah variabel acak yang tidak dibatasi mendekati normalitas. Metode ini telah digunakan oleh Horton dan Smith, dari Interstate Commerce Commission, untuk mendapatkan beberapa kumpulan angka acak yang tampaknya baik dari kumpulan besar angka non-acak yang buruk.

[0,1]u[0,1]FF1(u)

Ziggurat untuk setengah normal

Referensi


() Juta Digit mereka . Ini juga termasuk kutipannya yang terkenal tentang apa yang akan kami gambarkan sebagai perbedaan antara pembuatan angka acak dan pseudo-acak:"Siapa pun yang menganggap metode aritmatika menghasilkan angka acak, tentu saja, dalam keadaan berdosa. Sebab, seperti yang telah ditunjukkan beberapa kali, tidak ada yang namanya angka acak - hanya ada metode untuk menghasilkan angka acak , dan prosedur aritmatika yang ketat tentu saja bukan metode seperti itu. "

Gegat
sumber
5
Anda pasti bercanda ... (tapi, ya, itu benar-benar manual +1)
nalzok
8
Berapa banyak pekerjaan yang dimasukkan ke dalam ini!
Richard Hardy
3
Perhatikan bahwa dadu yang tidak standar bisa tidak adil, jadi ada baiknya untuk mengujinya terlebih dahulu, misalnya youtube.com/watch?v=VI3N4Qg-JZM
Tim
2
@RichardHardy Secara paradoks, sebenarnya lebih mudah bagi saya untuk menuliskan semua hal ini di depan saya, dan setidaknya untuk sementara waktu tersimpan dalam ingatan saya, daripada mencoba membawanya ke mana-mana di kepala saya!
Silverfish
2
Bagaimanapun, saya merasa mengesankan!
Richard Hardy
44

X=-2logU1cos(2πU2)
Y=-2logU1dosa(2πU2)X

Sebagai contoh, pada OS Linux saya, saya dapat memeriksa

$ date +%s.%N
1479733744.077762986
$ date +%s.%N
1479733980.615056616

U1=.077762986, U2=0,615056616
X
> sqrt(-2*log(.077762986))*cos(2*pi*.615056616)
[1] -1.694815

Tambahan: karena perhitungan logaritma dan cosinus mungkin dianggap tidak cukup manual , ada varian untuk Box-Müller yang menghindari menggunakan fungsi transendental tersebut (lihat Latihan 2.9 dalam buku kami Metode Statistik Monte Carlo ):

varian dari Box-Muller

Sekarang, orang dapat menentang versi ini karena variasi Eksponensial. Tetapi ada juga cara yang sangat pintar untuk mensimulasikan variasi-variasi itu tanpa panggilan ke fungsi transendental , karena von Neumann, sebagaimana dirangkum dalam algoritma ini direproduksi dari Variasikan Acak Non-seragam Luc Devroye yang Tidak Seragam :

masukkan deskripsi gambar di sini

Memang, ini membutuhkan perhitungan 1 / e, tetapi hanya sekali.

(0,1)2(0,1)(0,2π)

Menggunakan CLT untuk memperkirakan normalitas tentu saja bukan metode yang akan saya sarankan sebagai (1) Anda masih perlu variasi lain untuk memberi makan rata-rata, jadi mungkin juga menggunakan seragam dalam algoritma Box-Müller, dan (2) akurasi tumbuh cukup lambat dengan jumlah simulasi. Terutama jika menggunakan variabel acak diskrit seperti hasil dadu, bahkan dengan lebih dari enam wajah . Mengutip dari Thomas et al. (2007), survei tentang pro dan kontra dari generator acak Gaussian:

Teorema batas pusat tentu saja adalah contoh dari metode "perkiraan" — bahkan jika aritmatika sempurna digunakan, untuk K terbatas, output tidak akan menjadi Gaussian.

Berikut ini adalah eksperimen cepat untuk menggambarkan masalahnya: Saya menghasilkan 100 kali rata-rata 30 hasil cetakan:

dies=apply(matrix(sample(1:6,30*100,rep=TRUE),ncol=30),1,mean)

kemudian menormalkan rata-rata tersebut menjadi nol rata-rata satu varian

stdies=(dies-3.5)/sqrt(35/12/30)

dan melihat kecocokan normal [atau ketiadaan] sampel ini:

qqnorm (stdies, col = "gold2", pch = 19); abline (a = 0, b = 1, col = "steelblue", lwd = 2, lty = 2)

dies76/30122/30Dsaya

U=saya=1kDsaya-16saya
dengan k=15 (perhatikan bahwa 6¹⁵> 10¹¹, maka saya menghasilkan lebih dari 11 digit yang benar-benar acak), dan kemudian menerapkan transformasi Box-Müller di atas untuk mengubah pasangan seragam menjadi pasangan N (0,1) variasi,
dies=matrix(apply(matrix(sample(0:5,15*200,rep=TRUE),nrow=15)/6^(1:15),2,sum),ncol=2) 
norma=sqrt(-2*log(dies[,1]))*c(cos(2*pi*dies[,2]),sin(2*pi*dies[,2]))

kecocokannya sama baiknya dengan yang diharapkan untuk sampel normal ukuran 200 (hanya plot yang lain untuk sampel normal yang sebenarnya, norma=rnorm(100)):

enter image description here

sebagaimana ditunjukkan lebih lanjut oleh tes Kolmogorov-Smirnov:

> ks.test(norma,pnorm)

        One-sample Kolmogorov-Smirnov test

data:  norma
D = 0.06439, p-value = 0.3783
alternative hypothesis: two-sided
Xi'an
sumber
3

Ini tidak tepat - acak, tetapi harus cukup dekat, karena Anda tampaknya ingin percobaan kasar.

Gunakan ponsel Anda untuk mengatur kronometer. Setelah 10 detik yang baik, hentikan (Semakin Anda menunggu, semakin Anda mendekati hasil yang benar-benar "acak", tetapi 10 detik baik-baik saja). Ambil digit terakhir (misalnya, 10,67 detik akan memberi Anda 67). Terapkan tabel persentil untuk distribusi normal. Dalam contoh ini, Anda hanya perlu mencari 0,67 dan Anda akan menemukan nomornya. Dalam hal ini, nilai Anda sekitar 0,45. Ini tidak sepenuhnya tepat, tetapi itu akan memberi Anda estimasi yang kuat.

Jika Anda menggulung di bawah 50, lakukan saja 100- [Hasil Anda] dan gunakan tabel. Hasil Anda akan sama, dengan tanda minus, karena simetri N (0,1).

Thalantas
sumber
3

Mari kita melempar koin yang tidak bias nwaktu. Mulai dari nol, kami hitung+1 jika kepala, -1jika ekor. Setelahn koin membalik, kita membagi konter dengan n. Menggunakan teorema limit pusat , jikan cukup besar, maka kita harus memiliki "perkiraan realisasi" dari Gaussian yang dinormalisasi N(0,1).


Mengapa? Membiarkan

Xk: ={+1 jika kkoin flip adalah kepala-1 jika kKoin flip adalah ekor

menjadi variabel acak Bernoulli dengan P(Xk=±1)=12. Karenanya,

E(Xk)=0Var(Xk)=1

Membiarkan Y: =X1+X2++Xn. Karenanya,

E(Y)=0Var(Y)=n

Normalisasi,

Z: =Yn

kami mendapatkan variabel acak dengan varian unit

E(Z)=0Var(Z)=1
Rodrigo de Azevedo
sumber
1
As discussed in my answer, I fear the CLT is not an efficient use of the randomness in the coin flips: they would be better exploited as binary digits of a pseudo-random U(0,1) variate with simple or double precision.
Xi'an
@Xi'an I read your answer before posting mine, and your objection to the CLT seemed to be based on slow convergence. Since this is a thought experiment, flipping a coin 10 billion times does not cost anything. And it truly is a manual procedure that requires no computers, no computation of logarithms, square roots or cosines. Sure, one could use a slide rule, but that may be going too far.
Rodrigo de Azevedo
1
:}}: 10 miliar koin membalik tidak terdengar sangat manual bagiku ...!
Xi'an
Manual = dengan tangan. Menghitung logaritma dan cosinus dengan tangan juga membutuhkan waktu.
Rodrigo de Azevedo
0

Perlu dicatat bahwa setelah Anda dapat menghasilkan seragam (0,1), Anda dapat menghasilkan variabel acak apa pun yang dapat dihitung dengan invers cdf dengan hanya memasukkan variabel acak seragam ke dalam CDF terbalik.

Jadi bagaimana mungkin seseorang menghitung seragam (0,1) secara manual? Nah, seperti yang disebutkan oleh @Silverfish, ada berbagai dadu yang digunakan oleh pemain RPG tradisional. Salah satunya adalah mati bersisi sepuluh. Dengan asumsi ini adalah die fair, kita sekarang dapat menghasilkan seragam diskrit (0, 9).

We can also use this uniform(0,9) to represent a single digit of a random variable. So if we use two dice, we get a uniform random variable that can take on values 0.01,0.02,...,0.99,1.00. With three dice, we can get a uniform distribution on 0.001,0.002,...,0.999,1.000.

So we can get very close to a continuous uniform(0,1) by approximating it with a finely gridded discrete uniform distribution with a few 10 sided dice. This can then be plugged into an inverse CDF to produce the random variable of interest.

Cliff AB
sumber