Cara terbaik untuk melakukan itu adalah menghasilkan angka acak yang didistribusikan secara merata dalam satu set angka tertentu, dan kemudian menerapkan fungsi proyeksi ke set antara 0 dan 100 di mana proyeksi lebih mungkin mengenai angka yang Anda inginkan.
Biasanya cara matematika untuk mencapai ini adalah merencanakan fungsi probabilitas dari angka yang Anda inginkan. Kita bisa menggunakan kurva lonceng, tetapi mari kita demi perhitungan yang lebih mudah, hanya bekerja dengan parabola terbalik.
Mari kita membuat parabola sedemikian rupa sehingga akarnya berada pada 0 dan 100 tanpa mencondongkannya. Kami mendapatkan persamaan berikut:
f(x) = -(x-0)(x-100) = -x * (x-100) = -x^2 + 100x
Sekarang, semua area di bawah kurva antara 0 dan 100 mewakili set pertama kami di mana kami ingin angka yang dihasilkan. Di sana, generasi ini sepenuhnya acak. Jadi, yang perlu kita lakukan adalah menemukan batasan set pertama kita.
Batas bawah, tentu saja, 0. Batas atas adalah integral dari fungsi kami di 100, yaitu
F(x) = -x^3/3 + 50x^2
F(100) = 500,000/3 = 166,666.66666 (let's just use 166,666, because rounding up would make the target out of bounds)
Jadi kita tahu bahwa kita perlu membuat angka di suatu tempat antara 0 dan 166.666. Kemudian, kita hanya perlu mengambil nomor itu dan memproyeksikannya ke set kedua kita, yaitu antara 0 dan 100.
Kita tahu bahwa angka acak yang kita hasilkan adalah beberapa integral dari parabola kita dengan input x antara 0 dan 100. Itu berarti kita hanya harus berasumsi bahwa angka acak adalah hasil dari F (x), dan pecahkan untuk x.
Dalam hal ini, F (x) adalah persamaan kubik, dan dalam bentuk F(x) = ax^3 + bx^2 + cx + d = 0
, pernyataan berikut ini benar:
a = -1/3
b = 50
c = 0
d = -1 * (your random number)
Memecahkan ini untuk x menghasilkan Anda angka acak aktual yang Anda cari, yang dijamin berada dalam kisaran [0, 100] dan kemungkinan jauh lebih dekat dengan pusat daripada tepi.