code: func Choose(n, k int) float64 {
  	if k == 0 || k == n {
  		return 1
  	}
  	if k < 0 || n < k {
  		return 0
  	}
  	if n <= smallFactLimit { // Implies k <= smallFactLimit
  		// It's faster to do several integer multiplications
  		// than it is to do an extra integer division.
  		// Remarkably, this is also faster than pre-computing
  		// Pascal's triangle (presumably because this is very
  		// cache efficient).
  		numer := int64(1)
  		for n1 := int64(n - (k - 1)); n1 <= int64(n); n1++ {
  			numer *= n1
  		}
  		denom := smallFact[k]
  		return float64(numer / denom)
  	}
  
  	return math.Exp(lchoose(n, k))
  }
docs: // Choose returns the binomial coefficient of n and k.