예제 #1
0
mpz_class latticePaths(mpz_class m, mpz_class n) {
  if (m < n) {
    return binomialCoefficient(m + n, n);
  } else {
    return binomialCoefficient(m + n, m);
  }
}
예제 #2
0
void latticePaths(mpz_ptr result, mpz_t m, mpz_t n) {
  mpz_t mplusn;

  mpz_init(mplusn);

  mpz_add(mplusn, m, n);

  if (mpz_cmp(m, n) < 1) {
    binomialCoefficient(result, mplusn, n);
  } else {
    binomialCoefficient(result, mplusn, m);
  }

  mpz_clear(mplusn);
}
예제 #3
0
파일: binom.hpp 프로젝트: dkj/libmaus2
			static double binomSingle(double const p, uint64_t const k, uint64_t const n)
			{
				return 
					binomialCoefficient(k,n) * 
					slowPow(p,k) *
					slowPow(1-p,n-k);
			}
예제 #4
0
파일: binomial.cpp 프로젝트: zTrix/algo
int main() {
    printf("%d\n", binomial(6, 3));
    printf("%d\n", binomial(6, 8));
    printf("%d\n", binomial(5, 5));
    printf("%d\n", binomial(100, 5));
    int a[100];
    binomialCoefficient(7, a);
    for (int i = 0; i <= 7; i++) printf("%d ", a[i]);
    return 0;
}
예제 #5
0
double nucmath::binomialPMF(double p, size_t n, size_t k)
{
    if(k > n)
        return 0;

    double sum = 0.0;
    for(size_t i = 0; i <= k; i++)
        sum += binomialCoefficient(n, i) * std::pow(p, i) * std::pow(1.0-p, n-i);

    return sum;
}
예제 #6
0
void w3j_sqrt_sq(mpq_t r, long j1, long j2, long j3, long m1, long m2, long m3)
{
  mpz_t n,d,h;
  mpz_init(n);
  mpz_init(d);
  mpz_init(h);

  binomialCoefficient(n, 2*j1,j1-j2+j3);
  binomialCoefficient(h, 2*j2,j1+j2-j3);
  mpz_mul(n,n,h);
  binomialCoefficient(h, 2*j3,-j1+j2+j3);
  mpz_mul(n,n,h);;

  mpq_set_z(r,n);

  binomialCoefficient(d, 2*j1,j1+m1);
  binomialCoefficient(h, 2*j2,j2+m2);
  mpz_mul(d,d,h);
  binomialCoefficient(h, 2*j3,j3+m3);
  mpz_mul(d,d,h);

  mpq_set_den(r,d);
  mpq_canonicalize(r);

  mpz_clear(d); mpz_clear(h); mpz_clear(n);
}
예제 #7
0
int main(void){
    int n;
    int k;
    int binKoeff;
    printf("\n Berechnung des Binomialkoeffizienten n ueber k \n" );
    printf("\n Bitte Wert fuer n eingeben: ");
    scanf("%d", &n);
    printf("\n Bitte Wert fuer k eingeben: ");
    scanf("%d", &k);
    binKoeff = binomialCoefficient(n, k);
    printf("\n Der Binomialkoeffizienten n ueber k von %d und %d", n, k);
    printf(" ist: %d \n", binKoeff);
    return 0;
}
예제 #8
0
BezierPath createBezierPath(const std::vector<Geometry2d::Point>& controls) {
    Planning::BezierPath interp;
    size_t degree = controls.size();

    // generate coefficients
    vector<float> coeffs;
    for (size_t i = 0; i < degree; ++i) {
        coeffs.push_back(binomialCoefficient(degree - 1, i));
    }

    size_t nrPoints = 20;
    float inc = 1.0 / nrPoints;
    for (size_t t = 1; t < nrPoints - 1; ++t)
        interp.points.push_back(evaluateBezier(t * inc, controls, coeffs));
    interp.points.push_back(controls.at(controls.size() - 1));

    return interp;
}
예제 #9
0
		vector< vector<T> > combinations(vector<T> &v, unsigned int k) {

			unsigned int next = 0;

			if(k > v.size())
				throw k_GreaterThan_n_Exception();

			vector< vector<T> > combs( binomialCoefficient(v.size(), k) );

			vector<bool> binary(v.size());
			fill(binary.end() - k, binary.end(), true);

			do {
			   for(unsigned int i = 0 ; i < v.size() ; i++) {
				   if(binary[i])
					   combs[next].insert(combs[next].end(), v[i]);
			   }
			   next++;
			} while(next_permutation(binary.begin(), binary.end()));

			return combs;
		}
예제 #10
0
float BezierBernsteinCurve::bernsteinPolynomial(const int& n,const int& i,const float& t)const{

    return binomialCoefficient(n , i) * std::pow(t , i) * std::pow(1.0f - t , n - i);
}
예제 #11
-2
void w3j_intterm(mpz_t sum, long j1, long j2, long j3, long m1, long m2, long m3)
{
  mpz_t term,h;
  mpz_init(term);
  mpz_init(h);

  long I1 = 0;
  if(j1-j3+m2>I1) I1=j1-j3+m2;
  if(j2-j3-m1>I1) I1=j2-j3-m1;
  long I2 = j1+j2-j3;
  if(j1-m1<I2) I2=j1-m1;
  if(j2+m2<I2) I2=j2+m2;

  mpz_set_ui(sum,0);

  long sgn=1;
  if(iabs(I1)%2==1) sgn=-1;

  for(long k=I1; k<=I2; k++)
  {
//    sum+=sgn*binomialCoefficient(j1+j2-j3,k)*binomialCoefficient(j1-j2+j3,j1-m1-k)
//            *binomialCoefficient(-j1+j2+j3,j2+m2-k);
    binomialCoefficient(term, j1+j2-j3, k);
    binomialCoefficient(h,j1-j2+j3,j1-m1-k);
    mpz_mul(term,term,h);
    binomialCoefficient(h,-j1+j2+j3,j2+m2-k);
    mpz_mul(term,term,h);
    mpz_mul_si(term,term,sgn);
    mpz_add(sum,sum,term);
    sgn*= -1;
  }
  mpz_clear(h);
  mpz_clear(term);
}