Pertimbangkan parameter bentuk kecil dekat 0, seperti . Dalam rentang antara 0 dan , kira-kira , jadi pdf Gamma kira-kira . Ini dapat diintegrasikan ke CDF perkiraan, . Menolaknya, kita melihat kekuatan : eksponen besar. Untuk ini menyebabkan kemungkinan underflow (nilai presisi ganda kurang dari , lebih atau kurang). Berikut adalah plot peluang untuk mendapatkan underflow sebagai fungsi dari basis-sepuluh logaritmaαα=1/100αe−α1xα−1dx/Γ(α)Fα(x)=xααΓ(α)1/αα=1/10010−300α :
Salah satu solusinya adalah dengan mengeksploitasi perkiraan ini untuk menghasilkan varian log (Gamma): pada dasarnya, cobalah untuk menghasilkan variate Gamma dan jika terlalu kecil, buat logaritma dari perkiraan distribusi daya ini (seperti yang ditunjukkan di bawah). (Lakukan ini berulang kali hingga log berada dalam kisaran underflow, sehingga ini merupakan pengganti yang valid untuk varian underflow yang asli.) Untuk perhitungan Dirichlet, kurangi maksimum semua logaritma dari masing-masing nilai log: ini secara implisit mengubah semua variasi Gamma sehingga tidak akan memengaruhi nilai Dirichlet. Perlakukan setiap log yang dihasilkan yang terlalu kecil (katakanlah, kurang dari -100) sebagai log dengan nol sebenarnya. Exponentiate log lainnya. Sekarang Anda dapat melanjutkan tanpa underflow.
Ini akan memakan waktu lebih lama dari sebelumnya, tetapi setidaknya itu akan berhasil!
Untuk menghasilkan perkiraan log Gamma variate dengan parameter bentuk , precompute . Ini mudah, karena ada algoritma untuk menghitung nilai log Gamma secara langsung . Buat float acak seragam antara 0 dan 1, ambil logaritma, bagi dengan , dan tambahkan ke sana.αC=log(Γ(α))+log(α)αC
Karena parameter skala hanya mengubah skala variasinya, tidak ada masalah mengakomodasinya dalam prosedur ini. Anda bahkan tidak memerlukannya jika semua parameter skala sama.
Edit
Di balasan lain OP menjelaskan metode di mana kekuatan dari varian seragam (a variate) dikalikan dengan . Ini berfungsi karena pdf dari distribusi bersama kedua varian ini sama dengan . Untuk menemukan pdf dari kami mengganti , dibagi dengan Jacobean , dan mengintegrasikan . Integral harus berkisar dari hingga karena , dari mana1/αB(α)Γ(α+1)(αxα−1)(yαe−ydy/Γ(α+1))z=xyy→z/xxxz∞0≤y≤1
pdf(z)=αΓ(α+1)∫∞z(xα/x)e−x(z/x)α−1dxdz=1Γ(α)zα−1e−zdz,
yang merupakan pdf dari distribusi .Γ(α)
Intinya adalah bahwa ketika , nilai yang diambil dari tidak mungkin di-underflow dan dengan menjumlahkan log-nya dan kali log dari varian seragam independen kami akan memiliki log dari . Log cenderung sangat negatif, tetapi kita akan melewati konstruksi antilognya, yang akan melimpah dalam representasi titik mengambang.0<α<1Γ(α+1)1/αΓ(α)