8#include "tpcclibConfig.h"
35 if(isnan(v1) && isnan(v2))
return 1;
36 if(isnan(v1) || isnan(v2))
return 0;
38 if(isnan(lim) || lim<0.0)
return 0;
39 if(fabs(v1-v2)<=lim)
return 1;
61 if(a1==NULL || a2==NULL || n<1)
return 0;
62 for(
unsigned int i=0; i<n; i++)
if(!
doubleMatch(a1[i], a2[i], lim))
return 0;
85 if(isnan(v1) && isnan(v2))
return 1;
86 if(isnan(v1) || isnan(v2))
return 0;
88 if(isnan(lim))
return 0;
90 mean=0.5*(v1+v2);
if(!isnormal(mean))
return 0;
91 if(fabs((v1-v2)/mean)<=lim)
return 1;
108 do {macheps/=2.0;}
while((1.0+macheps/2.0)!=1.0);
126 if(t==NULL || s==NULL || n<1)
return;
127 for(i=0; i<n; i++) t[i]=s[i];
144 unsigned int i, tn=0;
145 if(t==NULL || s==NULL || n<1)
return(0);
146 for(i=0; i<n; i++)
if(isfinite(s[i])) t[tn++]=s[i];
162 if(a==NULL || n<1)
return(0);
163 unsigned int i, nn=0;
164 for(i=0; i<n; i++)
if(isnan(a[i])) nn++;
178 const unsigned int n,
184 if(amin!=NULL) *amin=nan(
"");
185 if(amax!=NULL) *amax=nan(
"");
186 if(a==NULL || n<1)
return(0);
188 double mi=nan(
""), ma=nan(
"");
189 unsigned int i, nn=0;
190 for(i=0; i<n; i++)
if(isfinite(a[i])) {
192 if(!isfinite(mi) || mi>a[i]) mi=a[i];
193 if(!isfinite(ma) || ma<a[i]) ma=a[i];
195 if(amin!=NULL) *amin=mi;
196 if(amax!=NULL) *amax=ma;
213 if(a==NULL || n<1)
return(s);
214 for(
unsigned int i=0; i<n; i++)
if(!isnan(a[i])) s+=a[i];
230 if(a==NULL || n<1)
return(nan(
""));
232 unsigned int i, ci=0;
233 for(i=0; i<n; i++)
if(!isnan(a[i])) {ci++; s+=a[i];}
234 if(ci<1)
return(nan(
""));
235 return(s/(
double)ci);
253 if(a==NULL || w==NULL || n<1)
return(nan(
""));
254 double s=0.0, ws=0.0;
255 unsigned int i, ci=0;
256 for(i=0; i<n; i++)
if(isnormal(a[i]) && isnormal(w[i]) && w[i]>0.0) {
257 ci++; s+=w[i]*a[i]; ws+=w[i];}
258 if(ci<1 || !(ws>0.0))
return(nan(
""));
281 if(v!=NULL) *v=nan(
"");
283 if(s==NULL)
return 1;
284 int n=
strTokenNr(s,
" \t");
if(n==0 || n>2)
return 1;
290 if(u==NULL)
return 0;
308 if(a==NULL || n<1)
return(0);
310 for(i=0; i<n; i++)
if(!(a[i]>0.0))
break;
326 if(a==NULL || n<1)
return(0);
328 for(i=0; i<n; i++)
if(a[i]>0.0)
break;
345 if(a==NULL || n<1)
return(0);
347 for(i=0; i<n; i++)
if(fabs(a[i])>0.0) m++;
363 if(a==NULL || n<1)
return(0);
364 unsigned int i, mi=0;
366 for(i=0; i<n; i++)
if(isnan(mv) || a[i]>mv) {mv=a[i]; mi=i;}
383 if(a==NULL || n<1)
return(0);
384 unsigned int i, mi=0;
386 for(i=0; i<n; i++)
if(isnan(mv) || fabs(a[i])>mv) {mv=fabs(a[i]); mi=i;}
402 if(a==NULL || n<1)
return(0);
403 unsigned int i, mi=0;
405 for(i=0; i<n; i++)
if(isnan(mv) || a[i]<mv) {mv=a[i]; mi=i;}
422 if(a==NULL || n<1)
return(0);
423 unsigned int i, mi=0;
425 for(i=0; i<n; i++)
if(isnan(mv) || fabs(a[i])<mv) {mv=fabs(a[i]); mi=i;}
439 const unsigned int n,
443 if(a==NULL || n<1)
return(n);
444 for(
unsigned int i=0; i<n; i++)
if(a[i]>=lim)
return(i);
456 const unsigned int n,
460 if(a==NULL || n<1)
return(n);
461 for(
unsigned int i=0; i<n; i++)
if(a[i]>lim)
return(i);
477 static const double a[] = {
478 -3.969683028665376E+01, 2.209460984245205E+02, -2.759285104469687E+02,
479 1.383577518672690E+02, -3.066479806614716E+01, 2.506628277459239
481 static const double b[] = {
482 -5.447609879822406E+01, 1.615858368580409E+02, -1.556989798598866E+02,
483 6.680131188771972E+01, -1.328068155288572E+01
485 static const double c[] = {
486 -7.784894002430293E-03, -3.223964580411365E-01, -2.400758277161838,
487 -2.549732539343734, 4.374664141464968, 2.938163982698783
489 static const double d[] = {
490 7.784695709041462E-03, 3.224671290700398E-01, 2.445134137142996, 3.754408661907416
495 double q=sqrt(-2.0 * log(x));
496 y = (((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5])
497 / ((((d[0]*q + d[1])*q + d[2])*q + d[3])*q + 1.0);
498 }
else if(x<=0.97575) {
501 y = (((((a[0]*r + a[1])*r + a[2])*r + a[3])*r + a[4])*r + a[5])*q
502 / (((((b[0]*r + b[1])*r + b[2])*r + b[3])*r + b[4])*r + 1.0);
504 double q=sqrt(-2.0 * log(1.0-x));
505 y = -(((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5])
506 / ((((d[0]*q + d[1])*q + d[2])*q + d[3])*q + 1.0);
508 e=0.5*erfc(-y/M_SQRT2)-x;
509 u=(e)*M_SQRT2*M_PI*exp(0.5*y*y);
510 y-=u/(1.0 + 0.5*y*u);
511 return(fabs(y/M_SQRT2));
int atofCheck(const char *s, double *v)
unsigned int doubleNonzeroes(double *a, const unsigned int n)
unsigned int doubleNaNs(double *a, const unsigned int n)
int doubleGetWithUnit(const char *s, double *v, int *u)
int doubleSpanPositives(double *a, const int n)
unsigned int doubleAbsMinIndex(double *a, const unsigned int n)
unsigned int doubleGEIndex(double *a, const unsigned int n, double lim)
int doubleCSpanPositives(double *a, const int n)
int doubleMatch(const double v1, const double v2, const double lim)
int doubleMatchRel(const double v1, const double v2, const double lim)
double doubleWMean(double *a, double *w, const unsigned int n)
unsigned int doubleMaxIndex(double *a, const unsigned int n)
int doubleArrayMatch(const double *a1, const double *a2, const unsigned int n, const double lim)
unsigned int doubleCopyFinite(double *t, double *s, const unsigned int n)
unsigned int doubleRange(double *a, const unsigned int n, double *amin, double *amax)
unsigned int doubleAbsMaxIndex(double *a, const unsigned int n)
unsigned int doubleGTIndex(double *a, const unsigned int n, double lim)
double doubleSum(double *a, const unsigned int n)
void doubleCopy(double *t, double *s, const unsigned int n)
double doubleMean(double *a, const unsigned int n)
unsigned int doubleMinIndex(double *a, const unsigned int n)
int strTokenNr(const char *s1, const char *s2)
int strTokenNCpy(const char *s1, const char *s2, int i, char *s3, int count)
Header file for library libtpcextensions.
@ UNIT_UNKNOWN
Unknown unit.
int unitIdentify(const char *s)