Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
AMath.txt137 linesDownload Raw Back to Adam
1 2#help_index "Math"3public U0 R2P(F64 *_mag=NULL,F64 *_arg=NULL,F64 x,F64 y)4{//Rect to polar5//Returns angle in range (-pi,pi]6  if (_arg)7    *_arg=Arg(x,y);8  if (_mag)9    *_mag=Sqrt(x*x+y*y);10}11 12public U0 P2R(F64 *_x=NULL,F64 *_y=NULL,F64 mag,F64 arg)13{//Polar to Rect14  if (_x)15    *_x=mag*Cos(arg);16  if (_y)17    *_y=mag*Sin(arg);18}19 20public F64 Wrap(F64 theta,F64 base=-pi)21{//Returns angle in range [base,base+2*pi)22  F64 res=theta%(2*pi);23  if (res>=base+2*pi)24    res-=2*pi;25  else if (res<base)26    res+=2*pi;27  return res;28}29 30public I64 DistSqrI64(I64 x1,I64 y1,I64 x2,I64 y2)31{//Distance-squared between 2 points.32  I64 dx=x1-x2,dy=y1-y2;33  return dx*dx+dy*dy;34}35 36public F64 ASin(F64 s)37{//Arc Sin (Inverse Sin).38  F64 c;39  c=s*s;40  if (c>=1.0)41    return pi/2.0;42  c=Sqrt(1.0-c);43  return ATan(s/c);44}45 46public F64 ACos(F64 c)47{//Arc Cos (Inverse Cos).48  F64 s;49  if (!c)50    return pi/2.0;51  s=c*c;52  if (s>=1.0)53    return 0.0;54  s=Sqrt(1.0-s);55  return ATan(s/c);56}57 58public F64 Sinh(F64 x)59{//Hyperbolic Sine.60  return 0.5*(Exp(x)-Exp(-x));61}62 63public F64 Cosh(F64 x)64{//Hyperbolic Cosine.65  return 0.5*(Exp(x)+Exp(-x));66}67 68#help_index "Math/Complex;Data Types/Complex"69public Complex *CAdd(Complex *sum,Complex *n1,Complex *n2)70{//sum=n1+n271  sum->x=n1->x+n2->x;72  sum->y=n1->y+n2->y;73  return sum;74}75 76public Complex *CSub(Complex *diff,Complex *n1,Complex *n2)77{//diff=n1-n278  diff->x=n1->x-n2->x;79  diff->y=n1->y-n2->y;80  return diff;81}82 83public Complex *CMul(Complex *prod,Complex *n1,Complex *n2)84{//prod=n1*n285  prod->x=n1->x*n2->x-n1->y*n2->y;86  prod->y=n1->x*n2->y+n1->y*n2->x;87  return prod;88}89 90public Complex *CDiv(Complex *quot,Complex *n1,Complex *n2)91{//quot=n1/n292  F64 m1,arg1,m2,arg2;93  R2P(&m1,&arg1,n1->x,n1->y);94  R2P(&m2,&arg2,n2->x,n2->y);95  m1/=m2;96  arg1-=arg2;97  quot->x=m1*Cos(arg1);98  quot->y=m1*Sin(arg1);99  return quot;100}101 102public Complex *CScale(Complex *dst,F64 s)103{//dst*=s104  dst->x*=s;105  dst->y*=s;106  return dst;107}108 109public Complex *CCopy(Complex *dst,Complex *src)110{//dst=src111  dst->x=src->x;112  dst->y=src->y;113  return dst;114}115 116public Complex *CEqu(Complex *dst,F64 x,F64 y)117{//dst=(x,y)118  dst->x=x;119  dst->y=y;120  return dst;121}122 123public Complex *CPoly(Complex *dst,I64 n,Complex *zeros,Complex *x)124{//Eval complex polynomial125  I64 i;126  Complex n1,n2;127  if (n>0) {128    CSub(dst,x,&zeros[0]);129    for (i=1;i<n;i++) {130      CCopy(&n1,dst);131      CMul(dst,&n1,CSub(&n2,x,&zeros[i]));132    }133  } else134    CEqu(dst,1.0,0.0);135  return dst;136}137