[Eine Seite zurück] [Übersicht] [Eine Seite vor]

Benutzung auf eigene Gefahr !
Keine Garantie für garnichts !

Binomialkoeffizienten berechnen

Sprache / Programm: Access ab Version 97 · Excel ab Version 97 · JavaScript ab Version 1.1
Beschreibung

Das Programm berechnet den Binomialkoeffizienten n über k.

Der Algorithmus hat folgende Merkmale:

  • Im Laufe der Berechnung wird kein Zwischenergebnis größer als das Endergebnis, so dass ein Überlauf nur dann eintritt, wenn auch das Endergebnis einen Überlauf auslösen würde.

  • Divisionen werden immer so ausgeführt, dass das Ergebnis ganzzahlig bleibt, so dass auch ganzzahlige Datentypen verwendet werden können.

Grundsätzlich lässt sich der Bereich der Ergebnisse mit voller Genauigkeit erweitern, wenn als Rückgabewert der Funktion der VBA-Datentyp Currency (größter ganzzahlig darstellbarer Wert 922.337.203.685.477) statt Long (größter ganzzahlig darstellbarer Wert 2.147.483.647) verwendet wird. Speziell in Excel wird dann allerdings dem Rückgabewert standardmäßig das Zahlenformat Währung vorgegeben, falls es nicht manuell gesetzt wurde.

Den Algorithmus habe ich auch in WikiBooks vorgestellt:

http://de.wikibooks.org/wiki/Algorithmensammlung:_Statistik:_Binomialkoeffizient

VBA-Quelltext
'*** Code In VBA:

Public Function BinomialKoeffizient(n As Long, ByVal k As Long) As Long
    Dim i As Long, s As Long

    ' Vergrößerung der Geschwindigkeit
    If n < k + k Then k = n - k

    ' Startwerte setzen
    s = n - k + 1
    BinomialKoeffizient = 1

    For i = 1 To k
        If s Mod i = 0 Then ' Teilbarkeit prüfen
            BinomialKoeffizient = BinomialKoeffizient * (s / i)
        Else
            BinomialKoeffizient = (BinomialKoeffizient / i) * s
        End If
        s = s + 1
    Next

End Function

'*** Code In JavaScript:

      Function BinomialKoeffizient(n, k)  {
        If (k + k > n) { k = n - k }
        If (k < 0) { Return 0 }
        Else {
          var Ergebnis = 1
          For (i=0;i          Return Ergebnis
        }
      }
Argumente der Funktion/Prozedur

n

Ganze Zahl, n>0

k

Ganze Zahl, 0<=n<=k