Option Explicit
Public n As Integer, p As Single, x As Integer
'計算符合二項式分佈事件的概率
'n:試驗次數
'p:一次試驗中事件A出現的概率
'x:n次試驗中事件A出現的次數
'Bin:事件A出現x次的概率
Public Sub Bino(n As Integer, p As Single, x As Integer, bin As Double)
Dim Q As Single, NN As Double, NI As Double, M As Double
Dim I As Integer, C As Double
Q = 1 - p
If x = 0 Then
bin = Q ^ n
Exit Sub
End If
NN = 0
For I = 1 To n
NN = NN + Log(I)
Next I 'NN = n!
M = 0
For I = 1 To x
M = M + Log(I)
Next I 'x!
NI = 0
For I = 1 To n - x
NI = NI + Log(I)
Next I '(n-x)!
C = NN - M - NI
C = C + Log(p ^ x) + Log(Q ^ (n - x))
bin = Exp(C)
End Sub
'計算二項式分佈函數
'n:試驗次數
'p:一次試驗中事件A出現的概率
'x:事件A出現的次數
'A(1,0 To x):事件概率
'A(2,0 To x):下側概率,即分佈函數
'A(3,0 To x):上側概率
Public Sub ABino(n As Integer, p As Single, x As Integer, A() As Double)
Dim y As Integer, B As Double
B = 0
For y = 0 To x
Bino n, p, y, A(1, y)
B = B + A(1, y)
If B > 1 Then B = 1
A(2, y) = B
A(3, y) = 1 - B
Next y
End Sub