Ich denke, Sie sollten alles tun, was Sie mit Logarithmen berechnen:
%Vor%Arbeiten Sie in der Log-Domäne, um Kombinations- und Potenzierungsfunktionen zu berechnen und sie dann auf den Exponenten zu heben.
In etwa so:
%Vor%Entfernt numerischen Überlauf / Überlauf wegen großer Zahlen. In Ihrem Beispiel mit %code% und %code% wird %code% , i zurückgegeben. e., der Logarithmus der endgültigen Wahrscheinlichkeit ist ziemlich klein und daher tritt ein Unterlauf auf, während %code% genommen wird. Sie können jedoch immer noch mit der log-Wahrscheinlichkeit arbeiten.
Ich möchte Binomialwahrscheinlichkeiten auf Python berechnen. Ich habe versucht, die Formel anzuwenden:
%Vor%Einige der Wahrscheinlichkeiten, die ich bekomme, sind unendlich. Ich habe einige Werte überprüft, für die p = inf. Für eine von ihnen, n = 450.000 und k = 17. Dieser Wert muss größer als 1e302 sein. Dies ist der Maximalwert, der von Floats behandelt wird.
Ich habe dann versucht, %code%
zu verwendenDies zeichnet numberOfTrials-Beispiele und berechnet die durchschnittliche Anzahl der Male, die der Wert valueOfInterest gezeichnet wird.
Dies erhöht keinen unendlichen Wert. Ist dies jedoch ein gültiger Weg? Und warum würde dieser Weg keinen unendlichen Wert aufbringen, während die Berechnung der Wahrscheinlichkeiten funktioniert?
Um Multiplizität wie Null um Unendlichkeit zu vermeiden, verwenden Sie Schritt für Schritt die Multiplikation.
%Vor%Weil Sie scipy verwenden, dachte ich, ich würde erwähnen, dass scipy bereits statistische Verteilungen implementiert hat. Beachten Sie auch, dass, wenn n so groß ist, die Binomialverteilung durch die Normalverteilung gut angenähert wird (oder Poisson, wenn p sehr klein ist).
%Vor%