Даже если факториальное значение становится чрезвычайно большим (как вы заметили), член λ k также становится несколько большим для компенсации.Для способа представления распределения, учитывающего это, см. статью Википедии о распределении Пуассона:
Реализация 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 может быть достаточно приличным приближением для высоких значений (идея, которую вы получаете из теории вероятностей, заключается в том, что эти значения действительно очень близки к нулюв любом случае).