我有一個需求,在發送下一個數據包之前,我需要在泊松時間內休眠。電流式I能想到的是VB的泊松延遲公式/函數?
(e^(-lambda) X lambda^t)/fact(t)
然而,對於時間的步驟280和更多的事實(T)將成爲由於溢出過時。
有人可以幫助我解決這個傳統的方式在VB.NET中?
我有一個需求,在發送下一個數據包之前,我需要在泊松時間內休眠。電流式I能想到的是VB的泊松延遲公式/函數?
(e^(-lambda) X lambda^t)/fact(t)
然而,對於時間的步驟280和更多的事實(T)將成爲由於溢出過時。
有人可以幫助我解決這個傳統的方式在VB.NET中?
我認爲你正在尋找到達時間間隔。可使用
t = (Math.log(1.0-Math.random())/-lambda
您發佈的公式來生成的隨機到達間隔時間是一個定義概率有恰好噸(你的情況)特定的時間週期內進港航班。
請參閱維基百科有關generating Poisson distributions的文章。
即使階乘值變得非常大(正如您所觀察到的),術語也會變得稍大以彌補。換一種方式來表示,考慮到這一分佈情況,參見the Wikipedia article on the Poisson distribution:
一個VB實現可能看起來像:
Module Module1
Sub Main()
Console.WriteLine(Poisson(4, 250))
Console.ReadKey()
End Sub
Function Poisson(ByVal lambda As Integer, ByVal k As Integer) As Double
Poisson = Math.Exp(k * Math.Log(lambda) - lambda - SumOverLn(1, k))
End Function
Function SumOverLn(ByVal start As Integer, ByVal endval As Integer) As Long
Dim i As Integer
SumOverLn = 0
For i = start To endval
SumOverLn = SumOverLn + Math.Log(i)
Next
End Function
End Module
它看起來像一段時間後,它是如此接近0它註冊爲這樣。您可能可以調整顯示精度以獲得更多小數位數,但0對於高數值可能是足夠恰當的近似值(您從概率論中得出的概念似乎是這些值確實非常接近零無論如何)。