X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=moebius2.git;a=blobdiff_plain;f=common.c;h=3b036aaa29f54508a5708a1965347734dc5cfa5e;hp=ba61341dc9bc45c457feba0ba87b112190df3c6a;hb=c9f085069bc4e555689dffedbfa08af250772f2a;hpb=eac31a20dbcedaad053f36c6b0de450325ecff0c diff --git a/common.c b/common.c index ba61341..3b036aa 100644 --- a/common.c +++ b/common.c @@ -15,6 +15,14 @@ double magnD(const double pq[D3]) { return gsl_blas_dnrm2(&v); } +double magnD2(const double pq[D3]) { + int k; + double d2= 0; + + K d2= ffsqa(pq[k], d2); + return d2; +} + double hypotD(const double p[D3], const double q[D3]) { int k; double pq[D3]; @@ -43,6 +51,25 @@ void xprod(double r[D3], const double a[D3], const double b[D3]) { r[2]= a[0]*b[1] - a[1]*b[0]; } +void normalise(double v[D3], double one, double absepsilon) { + int k; + double multby= one/(magnD(v) + absepsilon); + K v[k] *= multby; +} + +void xprod_norm(double r[D3], const double a[D3], const double b[D3], + double one, double absepsilon) { + xprod(r,a,b); + normalise(r, absepsilon, one); +} + +double dotprod(const double a[D3], const double b[D3]) { + int k; + double result= 0; + K result += a[k] * b[k]; + return result; +} + void libdie(const char *lib, int l, const char *str) { fprintf(stderr,"%s library call failed, line %d: %s\n", lib, l, str); } @@ -54,4 +81,5 @@ void gsldie(int l, const char *what, int status) { } void diee(const char *what) { perror(what); exit(16); } -void flushoutput(void) { if (fflush(stdout)||ferror(stdout)) diee("stdout"); } +void fail(const char *emsg) { fputs(emsg,stderr); exit(12); } +void flushoutput(void) { if (ferror(stdout)||fflush(stdout)) diee("stdout"); }