예제 #1
0
파일: taylor2p.c 프로젝트: fweik/scafacos
/** Integrated generalized Lagrange basis polynomials
 *    B_j(y) := r^(j+1) (IntBasisPoly(p,j,y) - IntBasisPoly(p,j,-1))
 *  satisfies the 2p+1 Hermite interpolation conditions
 *    B_j^k(-1) = delta(k,j), for k=0,...,p,
 *    B_j^k(1)  = 0,          for k=1,...,p. (the function value at y=-1 is not interpolated)
 *  Analogously, we get the derivates at y=1 via
 *    C_j(y) := (-r)^(j+1) (IntBasisPoly(p,j,-y) - IntBasisPoly(p,j,1))
 *  that satisfies the 2p+1 Hermite interpolation conditions
 *    C_j^k(-1) = 0,          for k=0,...,p,
 *    C_j^k(1)  = delta(k,j), for k=1,...,p.
 *  */
static fcs_float IntBasisPoly(fcs_int p, fcs_int j, fcs_float y)
{
  fcs_int k,l;
  fcs_float sum1=0.0, sum2=0.0;
  
  for (l=0; l<=p; l++) {
    sum1 = 0.0;
    for (k=0; k<=p-j-1; k++) {
      sum1 += binom(p+k-1,k)*fak(j+k)/fak(j+k+1+l)*fcs_pow((1.0+y)/2.0,(fcs_float)k);
    }
    sum2 += fcs_pow(1.0+y,(fcs_float)l)*fcs_pow(1.0-y,(fcs_float)(p-l))/fak(p-l)*sum1;
  }
  return sum2 * fak(p)/fak(j)/(1<<p)*fcs_pow(1.0+y,(fcs_float)(j+1)); /* 1<<p = 2^p */
}
예제 #2
0
int main(int argc, char *argv[]) {
    unsigned v = 7;

    if (argc > 1)
        v = atoi(argv[1]);
    printf("%u! = %u\n", v, fak(v));
}
예제 #3
0
void fak(int x,unsigned long int *y)
{
if(x){
	*y *=x;
	x--;
	fak(x,y);
}
}
예제 #4
0
파일: fastsum.c 프로젝트: poulson/nfft
/** basis polynomial for regularized kernel */
double BasisPoly(int m, int r, double xx)
{
  int k;
  double sum=0.0;

  for (k=0; k<=m-r; k++) {
    sum+=binom(m+k,k)*pow((xx+1.0)/2.0,(double)k);
  }
  return sum*pow((xx+1.0),(double)r)*pow(1.0-xx,(double)(m+1))/(1<<(m+1))/fak(r); /* 1<<(m+1) = 2^(m+1) */
}
예제 #5
0
파일: main.cpp 프로젝트: CCJY/coliru
int main() {
    using t=std::integral_constant<std::size_t, fak(7)>;
    
    using f0=std::integral_constant<std::size_t, a[0]>;
    using f1=std::integral_constant<std::size_t, a[1]>;
    using f2=std::integral_constant<std::size_t, a[2]>;
    using f3=std::integral_constant<std::size_t, a[3]>;
    
    std::cout << f0{} << " " << f1{} << f2{} << f3{} << std::endl; 
}
예제 #6
0
int main()
{
int x;
unsigned long int y = 1, *p_y;
p_y = &y;
printf("zadej cislo vypocitam faktorial\n");
scanf("%d",&x);
fak(x,p_y);
printf("%lu\n",y);
return 0;
}
예제 #7
0
파일: zeiger.c 프로젝트: wiesel78/c
int main(int argc, char **argv){
	
	int a = A;
	char feld[3][4];
	char (*ptr)[] = feld;
	
	feld[0][0] = 88;
	
	setFeld(ptr);
	
	
	fak(&a);
	
	return EXIT_SUCCESS;
}
예제 #8
0
unsigned fak(unsigned n) {
    if (n == 0)
        return 1;
    return fak(n-1) * n;
}
예제 #9
0
파일: fastsum.c 프로젝트: poulson/nfft
/** binomial coefficient */
double binom(int n, int m)
{
  return fak(n)/fak(m)/fak(n-m);
}
예제 #10
0
파일: fastsum.c 프로젝트: poulson/nfft
/** factorial */
double fak(int n)
{
  if (n<=1) return 1.0;
  else return (double)n*fak(n-1);
}
예제 #11
0
 /* series for erf computation via series expansion */
 static double erfseries(int i)
 {
     return (2*i+1)*fak(i);
 }
예제 #12
0
파일: calculator.cpp 프로젝트: flesniak/pi
void calculator::run()
{
abort = false;
if( (mprec == 0) | (mpar == 0) )
    return;
qDebug() << "Parameter" << mpar << "Precision" << mprec << "Mode" << mmode;

mp::mp_init(mprec+2);
mp::mpsetprec(mprec);
mp::mpsetoutputprec(mprec);

time.start();

switch( mmode ) {
    case montecarlo : {
                      mpar = pow(10, mpar);
                      quint64 walk = mpar/1000;
                      quint64 hits = 0;
                      double x,y;
                      if( walk == 0 ) walk = 1;
                      for(quint64 current=1;current<=mpar;current++) {
                          x=genrand_real3();
                          y=genrand_real3();
                          if( x*x+y*y <= 1 )
                              hits++;
                          if( current % walk == 0 )
                              emit update(1000*current/mpar);
                          if( abort )
                              break;
                      }
                      mp_real pi = mp_real(hits)/mp_real(mpar)*4;
                      mresult = QString::fromStdString(pi.to_string());
                      break;
                      }
    case montemin1 : {
                      mpar = pow(10, mpar)-1;
                      quint64 walk = mpar/1000;
                      quint64 hits = 0;
                      double x,y;
                      if( walk == 0 ) walk = 1;
                      for(quint64 current=1;current<=mpar;current++) {
                          x=genrand_real3();
                          y=genrand_real3();
                          if( x*x+y*y <= 1 )
                              hits++;
                          if( current % walk == 0 )
                              emit update(1000*current/mpar);
                          if( abort )
                              break;
                      }
                      mp_real pi = mp_real(hits)/mp_real(mpar)*4;
                      mresult = QString::fromStdString(pi.to_string());
                      break;
                      }
    case subdivide : {
                     mp_real x, a;
                     mpar = pow(10, mpar);
                     quint64 walk = mpar/1000;
                     quint64 current = 0;
                     a=0;
                     mp_real real_par(mpar);
                     x=1/(real_par*0.5);
                     while( x < 1 ) {
                         current++;
                         a+=1*sqrt(1-(x*x))/real_par;
                         x+=(1/real_par);
                         if( current % walk == 0)
                             emit update(current/walk);
                         if( abort )
                             break;
                         }
                     mp_real pi = a*4;
                     mresult = QString::fromStdString(pi.to_string());
                     break;
                     }
    case grid : {
                quint64 res = pow(10, mpar);
                quint32 walk = res/1000+1;
                quint64 hits = 0;
                quint64 x = 0, y = res;
                while( y > 0 )
                {
                    while( x*x+y*y <= res )
                        x++;
                    hits += x;
                    if( y % walk == 0 ) emit update((res-y)/(walk+1));
                    y--;
                    if( abort )
                        break;
                }
                mp_real pi = mp_real(hits)/mp_real(res)*4;
                mresult = QString::fromStdString(pi.to_string());
                break;
                }
    case bbp : {
                mp_real pi;
                for(quint32 step=0;step<=mpar;step++) {
                    pi += ((mp_real(4)/mp_real(8*step+1))-(mp_real(2)/mp_real(8*step+4))-(mp_real(1)/mp_real(8*step+5))-(mp_real(1)/mp_real(8*step+6)))/(pow(mp_real(16),(int)step));
                    emit update(1000*step/mpar);
                    if( abort )
                        break;
                    }
                mresult = QString::fromStdString(pi.to_string());
                break;
                }
    case chudnovsky : {
                mp_real temp;
                for(quint32 step=0;step<=mpar;step++) {
                    mp_real upper = fak(6*step)*(13591409+545140134*mp_real(step))*pow(-1,step);
                    mp_real lower = pow(640320,mp_real(3*step)+1.5)*(fak(3*step)*pow(fak(step),3)+0.0);
                    temp += upper/lower;
                    emit update(1000*step/mpar);
                    if( abort )
                        break;
                    }
                mp_real pi = mp_real(1)/(temp*12);
                mresult = QString::fromStdString(pi.to_string());
                break;
                }
    case polygon : {
                mp_real pi_min = mp_real(mpar)/2*sin(2*mp_real::_pi/mp_real(mpar));
                mp_real pi_max = mp_real(mpar)*tan(mp_real::_pi/mp_real(mpar));
                mp_real pi_mid = (pi_min+pi_max)/2;
                mresult = QString::fromStdString(pi_min.to_string())+" < Pi < "+QString::fromStdString(pi_max.to_string()) +"\nPi = "+QString::fromStdString(pi_mid.to_string());
                break;
                }
}

duration = time.elapsed();



mp::mp_finalize();
}
예제 #13
0
파일: taylor2p.c 프로젝트: fweik/scafacos
/** Generalized Lagrange basis polynomials (including derivatives up to degree p)
 *    B_j(y) := r^j BasisPoly(p,j,y) 
 *  satisfies the 2p+2 Hermite interpolation conditions
 *    B_j^k(-1) = delta(k,j), for k=0,...,p,
 *    B_j^k(1)  = 0,          for k=0,...,p.
 *  I.e., each B_j(y) is equal to 1 in the j-th derivative at y=-1 and zero in all other interpolation points.
 *  Analogously, we get the derivates at y=1 via
 *    C_j(y) := (-r)^j BasisPoly(p,j,-y) 
 *  that satisfies the 2p+2 Hermite interpolation conditions
 *    C_j^k(-1) = 0,          for k=0,...,p,
 *    C_j^k(1)  = delta(k,j), for k=0,...,p.
 *  */
static fcs_float BasisPoly(fcs_int p, fcs_int j, fcs_float y)
{
  fcs_int k;
  fcs_float sum=0.0;

  for (k=0; k<=p-j; k++) {
    sum+=binom(p+k,k)*fcs_pow((y+1.0)/2.0,(fcs_float)k);
  }
  return sum*fcs_pow((y+1.0),(fcs_float)j)*fcs_pow(1.0-y,(fcs_float)(p+1))/(1<<(p+1))/fak(j); /* 1<<(p+1) = 2^(p+1) */
}
예제 #14
0
파일: taylor2p.c 프로젝트: fweik/scafacos
/** binomial coefficient */
static fcs_float binom(fcs_int n, fcs_int m)
{
  return fak(n)/fak(m)/fak(n-m);
}
예제 #15
0
파일: taylor2p.c 프로젝트: fweik/scafacos
/** factorial */
static fcs_float fak(fcs_int n)
{
  if (n<=1) return 1.0;
  else return (fcs_float)n*fak(n-1);
}