Hãy xem xét một tham số hình dạng nhỏ gần 0, chẳng hạn như α = 1 / 100 . Trong phạm vi giữa 0 và α , e - α là khoảng 1 , vì vậy pdf Gamma là khoảng x α - 1 d x / Γ ( α ) . Điều này có thể được tích hợp vào một CDF gần đúng, F α ( x ) = x ααα = 1 / 100αe- α1xα - 1dx / Γ ( α ) . Đảo ngược nó, chúng ta thấy mộtsức mạnh1/α: một số mũ rất lớn. Đối vớiα=1/100điều này gây ra một số cơ hội underflow (một giá trị chính xác kép ít hơn10-300, nhiều hơn hoặc ít hơn). Dưới đây là một âm mưu của khả năng mắc underflow là một hàm của logarit cơ số mườiα:Fα(x)=xααΓ(α)1/αα=1/10010−300α
Một giải pháp là khai thác xấp xỉ này để tạo ra các biến thiên log (Gamma): thực tế, hãy thử tạo một biến thể Gamma và nếu nó quá nhỏ, hãy tạo logarit của nó từ phân phối công suất gần đúng này (như được hiển thị bên dưới). (Làm điều này nhiều lần cho đến khi nhật ký nằm trong phạm vi dòng chảy, sao cho nó là sự thay thế hợp lệ cho phương sai dòng chảy ban đầu.) Đối với phép tính Dirichlet, hãy trừ tối đa tất cả các logarit từ mỗi giá trị nhật ký: điều này hoàn toàn loại bỏ tất cả Gamma thay đổi để nó không ảnh hưởng đến các giá trị Dirichlet. Hãy coi bất kỳ nhật ký kết quả nào quá nhỏ (giả sử, nhỏ hơn -100) là nhật ký của số 0 thực. Lũy thừa các bản ghi khác. Bây giờ bạn có thể tiến hành mà không có dòng chảy.
Điều này sẽ mất nhiều thời gian hơn trước đây, nhưng ít nhất nó sẽ hoạt động!
Để tạo một nhật ký gần đúng Gamma biến thiên với tham số hình dạng , hãy tính trước C = log ( Γ ( α ) ) + log ( α ) . Điều này là dễ dàng, bởi vì có các thuật toán để tính toán trực tiếp các giá trị của nhật ký Gamma . Tạo một số float ngẫu nhiên đồng nhất trong khoảng từ 0 đến 1, lấy logarit của nó, chia cho α và thêm C vào nó.αC= nhật ký( Γ ( α ) ) + log( α )αC
Bởi vì tham số tỷ lệ chỉ đơn thuần là thay đổi phương sai, nên không có vấn đề gì trong việc cung cấp nó trong các quy trình này. Bạn thậm chí không cần nó nếu tất cả các tham số tỷ lệ là như nhau.
Biên tập
Trong một câu trả lời khác, OP mô tả một phương thức trong đó công suất của một phương sai đồng nhất (một phương sai B ( α ) ) được nhân với một phương sai Γ ( α + 1 ) . Công trình này vì pdf của sự phân bố chung của hai variates bình đẳng ( α x α - 1 ) ( y α e - y d y / Γ ( α + 1 ) ) . Để tìm pdf của z = x y1 / αB(α)Γ(α+1)(αxα−1)(yαe−ydy/Γ(α+1))z=xychúng ta thay thế , chia cho Jacobean x và tích hợp x . Phạm vi bắt buộc không thể thiếu từ z đến ∞ vì 0 ≤ y ≤ 1 , từ đâuy→z/xxxz∞0≤y≤1
pdf(z)=αΓ(α+1)∫∞z(xα/x)e−x(z/x)α−1dxdz=1Γ(α)zα−1e−zdz,
đó là pdf của một phân phối.Γ(α)
Toàn bộ vấn đề là khi , giá trị rút ra từ Γ ( α + 1 ) không có khả năng underflow và bằng cách tổng hợp bản ghi của nó và 1 / α lần so với nhật ký của một variate thống nhất độc lập, chúng tôi sẽ có các bản ghi của một Γ ( α ) variate. Nhật ký có khả năng rất tiêu cực, nhưng chúng ta sẽ bỏ qua việc xây dựng các antimon của nó, nó sẽ trải qua một biểu diễn dấu phẩy động.0<α<1Γ(α+1)1/αΓ(α)