// matematica.c # include "alfa.h" double tabcos[3600],tabsin[3600]; /////////////////////////////////////// double Bin (int n, int k) {double num,den,i,j; for (num=den=j=1,i=n;j<=k;i--,j++) {num*=i; den*=j;} return num/den;} // Creazione delle tabelle // per seno e coseno. void Creatabtrig () {int k; double x; Double C,S; for (k=0,C=tabcos,S=tabsin;k<3600; k++,C++,S++) {x=k*CMPid180/10; *C=cos(x); *S=sin(x);}} // Quoziente intero di due numeri reali. int FaDiv (double a, double b) {int q=floor(a/b); double r=a-b*q; if ((b<0)&&(r<0)) q++; return q;} // Divisione e resto simultaneamente. void FaDivResto (double a, double b, Int Q, Double R) {int q=floor(a/b); double r=a-b*q; if ((b<0)&&(r<0)) {q++; r-=b;} *Q=q; *R=r;} // Resto nella divisione // di numeri reali. double FaResto (double a, double b) {int q=floor(a/b); double r=a-b*q; if ((b<0)&&(r<0)) r-=b; return r;} double Fatt (int n) {if (n==0) return 1; return Fatt(n-1)*n;} // Coseno per argomenti espressi in gradi. double FtCosg (double x) {return cos(x*CMPid180);} // Seno per argomenti espressi in gradi. double FtSing (double x) {return sin(x*CMPid180);} double Gamma (double x) {return exp(lgamma(x));} Double Hadamard (Double A, Double B, int m) {int k; Double P,U; P=calloc(m,sizeof(double)); for (k=0,U=P;k0 ? 1 : x==0 ? 0 : -1;} double Somma (double *A) {double s,v; for (s=0;(v=*A)>=0;A++) s+=v; return s;} int T (int x) {if (x%2==0) return x/2; return 3*x+1;} double Trigdatabella (double x, Double Tabella) {x=FaResto(x,360)*10; return Tabella[lrint(x)];}