/** 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 */ }
int main(int argc, char *argv[]) { unsigned v = 7; if (argc > 1) v = atoi(argv[1]); printf("%u! = %u\n", v, fak(v)); }
void fak(int x,unsigned long int *y) { if(x){ *y *=x; x--; fak(x,y); } }
/** 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) */ }
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; }
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; }
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; }
unsigned fak(unsigned n) { if (n == 0) return 1; return fak(n-1) * n; }
/** binomial coefficient */ double binom(int n, int m) { return fak(n)/fak(m)/fak(n-m); }
/** factorial */ double fak(int n) { if (n<=1) return 1.0; else return (double)n*fak(n-1); }
/* series for erf computation via series expansion */ static double erfseries(int i) { return (2*i+1)*fak(i); }
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(); }
/** 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) */ }
/** binomial coefficient */ static fcs_float binom(fcs_int n, fcs_int m) { return fak(n)/fak(m)/fak(n-m); }
/** factorial */ static fcs_float fak(fcs_int n) { if (n<=1) return 1.0; else return (fcs_float)n*fak(n-1); }