LibRan  0.1
Pseudo-random number distribution generator
LRgsn.c
Go to the documentation of this file.
1 
149 /*
150  * Copyright 2019 R.K. Owen, Ph.D.
151  * License see lgpl.md (Gnu Lesser General Public License)
152  */
153 #ifdef __cplusplus
154 extern "C" {
155 #endif
156 
157 #include <math.h>
158 #include "libran.h"
159 
169 double LRd_gsn2_RAN(LR_obj *o) {
170  double half = .5;
171  double sa = half * (o->b.d - o->a.d);
172  return o->a.d + sa * (o->ud(o) + o->ud(o));
173 }
174 
183 double LRd_gsn2_PDF(LR_obj *o, double x) {
184  double zero = 0.0, one = 1.0, two = 2.0, half = .5;
185  double mm = half*(o->b.d - o->a.d),
186  sa = one/mm,
187  xx = sa * (x - o->a.d);
188 
189  if (xx <= zero || xx >= two) {
190  return zero;
191  } else if (xx <= one) {
192  return sa * xx;
193  } else {
194  return sa * (two - xx);
195  }
196 }
197 
206 double LRd_gsn2_CDF(LR_obj *o, double x) {
207  double zero = 0.0, one = 1.0, two = 2.0, half = .5;
208  double mm = half*(o->b.d - o->a.d),
209  sa = one/mm,
210  xx = sa * (x - o->a.d);
211 
212  if (xx <= zero) {
213  return zero;
214  } else if (xx >= two) {
215  return one;
216  } else {
217  if (xx < one) {
218  return half * xx * xx;
219  } else {
220  return xx * (two - half * xx) - one;
221  }
222  }
223 }
224 
234 float LRf_gsn2_RAN(LR_obj *o) {
235  float half = .5;
236  float sa = half * (o->b.f - o->a.f);
237  return o->a.f + sa * (o->uf(o) + o->uf(o));
238 }
239 
248 float LRf_gsn2_PDF(LR_obj *o, float x) {
249  float zero = 0.0, one = 1.0, two = 2.0, half = .5;
250  float mm = half*(o->b.f - o->a.f),
251  sa = one/mm,
252  xx = sa * (x - o->a.f);
253 
254  if (xx <= zero || xx >= two) {
255  return zero;
256  } else if (xx <= one) {
257  return sa * xx;
258  } else {
259  return sa * (two - xx);
260  }
261 }
262 
271 float LRf_gsn2_CDF(LR_obj *o, float x) {
272  float zero = 0.0, one = 1.0, two = 2.0, half = .5;
273  float mm = half*(o->b.f - o->a.f),
274  sa = one/mm,
275  xx = sa * (x - o->a.f);
276 
277  if (xx <= zero) {
278  return zero;
279  } else if (xx >= two) {
280  return one;
281  } else {
282  if (xx < one) {
283  return half * xx * xx;
284  } else {
285  return xx * (two - half * xx) - one;
286  }
287  }
288 }
289 
290 /* gsn4 - data */
291 
292 int gscdfn4[5][5] = {
293  {0,0,0,0,1},
294  {1,1,1,1,-1},
295  {1,2,0,-1,1},
296  {23,1,-1,1,-1},
297  {1,0,0,0,0}
298 };
299 
300 int gscdfd4[5][5] = {
301  {1,1,1,1,24},
302  {24,6,4,6,8},
303  {2,3,1,3,8},
304  {24,6,4,6,24},
305  {1,1,1,1,1}
306 };
307 
308 int gspdfn4[5][5] = {
309  {0,0,0,1,0},
310  {1,1,1,-1,0},
311  {2,0,-1,1,0},
312  {1,-1,1,-1,0},
313  {0,0,0,0,0}
314 };
315 
316 int gspdfd4[5][5] = {
317  {1,1,1,6,1},
318  {6,2,2,2,1},
319  {3,1,1,2,1},
320  {6,2,2,6,1},
321  {1,1,1,1,1}
322 };
323 
324 
325 double gspdf4d[5][5] = {
326  NAN
327 };
328 
329 double gscdf4d[5][5] = {
330  NAN
331 };
332 
333 float gspdf4f[5][5] = {
334  NAN
335 };
336 
337 float gscdf4f[5][5] = {
338  NAN
339 };
340 
341 /* set up coefs from rational integers */
342 int gs4initd(void) {
343  for (int i = 0; i < 5; i++) {
344  for (int j = 0; j < 5; j++) {
345  gspdf4d[i][j] = ((double) gspdfn4[i][j])
346  / ((double) gspdfd4[i][j]);
347  gscdf4d[i][j] = ((double) gscdfn4[i][j])
348  / ((double) gscdfd4[i][j]);
349  }
350  }
351 }
352 
353 int gs4initf(void) {
354  for (int i = 0; i < 5; i++) {
355  for (int j = 0; j < 5; j++) {
356  gspdf4f[i][j] = ((float) gspdfn4[i][j])
357  / ((float) gspdfd4[i][j]);
358  gscdf4f[i][j] = ((float) gscdfn4[i][j])
359  / ((float) gscdfd4[i][j]);
360  }
361  }
362 }
363 
373 double LRd_gsn4_RAN(LR_obj *o) {
374  double fourth = .25;
375  double sa = fourth * (o->b.d - o->a.d);
376 
377  return o->a.d + sa * (o->ud(o) + o->ud(o) + o->ud(o) + o->ud(o));
378 }
379 
388 double LRd_gsn4_PDF(LR_obj *o, double x) {
389  double zero = 0.0, one = 1.0, two = 2.0, four = 4.0;
390  double mm = o->b.d - o->a.d,
391  sa = four/mm,
392  xx = sa * (x - o->a.d) - two;
393 
394  if (isnan(gspdf4d[0][0])) gs4initd();
395 
396  if (xx <= -two || xx >= two) {
397  return zero;
398  } else {
399  int i = xx + two; /* truncate */
400  double xt = xx + two - i; /* translate to [0-1] */
401  double r = gspdf4d[i][4];
402  /* horners rule to evaluate polynomial */
403  for (int j = 3; j >= 0; j--) {
404  r = (gspdf4d[i][j] + xt*r);
405  }
406  return sa * r;
407  }
408 }
409 
418 double LRd_gsn4_CDF(LR_obj *o, double x) {
419  double zero = 0.0, one = 1.0, two = 2.0, four = 4.0;
420  double mm = o->b.d - o->a.d,
421  sa = four/mm,
422  xx = sa * (x - o->a.d) - two;
423 
424  if (isnan(gscdf4d[0][0])) gs4initd();
425 
426  if (xx <= -two) {
427  return zero;
428  } else if (xx >= two) {
429  return one;
430  } else {
431  int i = xx + two; /* truncate */
432  double xt = xx + two - i; /* translate to [0-1] */
433  double r = gscdf4d[i][4];
434  /* horners rule to evaluate polynomial */
435  for (int j = 3; j >= 0; j--) {
436  r = (gscdf4d[i][j] + xt*r);
437  }
438  return r;
439  }
440 }
441 
451 float LRf_gsn4_RAN(LR_obj *o) {
452  float fourth = .25;
453  float sa = fourth * (o->b.f - o->a.f);
454 
455  return o->a.f + sa * (o->uf(o) + o->uf(o) + o->uf(o) + o->uf(o));
456 }
457 
466 float LRf_gsn4_PDF(LR_obj *o, float x) {
467  float zero = 0.0, one = 1.0, two = 2.0, four = 4.0;
468  float mm = o->b.f - o->a.f,
469  sa = four/mm,
470  xx = sa * (x - o->a.f) - two;
471 
472  if (isnan(gspdf4f[0][0])) gs4initf();
473 
474  if (xx <= -two || xx >= two) {
475  return zero;
476  } else {
477  int i = xx + two; /* truncate */
478  float xt = xx + two - i; /* translate to [0-1] */
479  float r = gspdf4f[i][4];
480  /* horners rule to evaluate polynomial */
481  for (int j = 3; j >= 0; j--) {
482  r = (gspdf4f[i][j] + xt*r);
483  }
484  return sa * r;
485  }
486 }
487 
496 float LRf_gsn4_CDF(LR_obj *o, float x) {
497  float zero = 0.0, one = 1.0, two = 2.0, four = 4.0;
498  float mm = o->b.f - o->a.f,
499  sa = four/mm,
500  xx = sa * (x - o->a.f) - two;
501 
502  if (isnan(gspdf4f[0][0])) gs4initf();
503 
504  if (xx <= -two) {
505  return zero;
506  } else if (xx >= two) {
507  return one;
508  } else {
509  int i = xx + two; /* truncate */
510  float xt = xx + two - i; /* translate to [0-1] */
511  float r = gscdf4f[i][4];
512  /* horners rule to evaluate polynomial */
513  for (int j = 3; j >= 0; j--) {
514  r = (gscdf4f[i][j] + xt*r);
515  }
516  return r;
517  }
518 }
519 
520 /* gsn12 - data [ */
521 long gscdfn12[13][13] = {
522  {0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,1l},
523  {1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,-1l},
524  {1021l,509l,253l,25l,61l,29l,13l,1l,1l,-1l,-1l,-1l,1l},
525  {397l,50879l,5203l,907l,79l,239l,1l,-1l,-1l,-1l,1l,1l,-1l},
526  {29639l,1093l,16973l,31l,29l,-17l,-1l,0l,1l,1l,-1l,-1l,1l},
527  {12831419l,1623019l,6787l,-1l,-443l,-43l,167l,11l,-1l,-1l,1l,1l,-1l},
528  {1l,655177l,0l,-809l,0l,31l,0l,-23l,0l,1l,0l,-1l,1l},
529  {67002181l,1623019l,-6787l,-1l,443l,-43l,-167l,11l,1l,-1l,-1l,1l,-1l},
530  {1300921l,1093l,-16973l,31l,-29l,-17l,1l,0l,-1l,1l,1l,-1l,1l},
531  {393843l,50879l,-5203l,907l,-79l,239l,-1l,-1l,1l,-1l,-1l,1l,-1l},
532  {119749379l,509l,-253l,25l,-61l,29l,-13l,1l,-1l,-1l,1l,-1l,1l},
533  {479001599l,1l,-1l,1l,-1l,1l,-1l,1l,-1l,1l,-1l,1l,-1l},
534  {1l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l}
535 };
536 /* integer type must support max value = 479001599 */
537 
538 long gscdfd12[13][13] = {
539  {1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,479001600l},
540  {479001600l,39916800l,7257600l,2177280l,967680l,604800l,518400l,604800l,967680l,2177280l,7257600l,39916800l,43545600l},
541  {119750400l,9979200l,1814400l,108864l,241920l,151200l,129600l,30240l,241920l,544320l,907200l,3991680l,8709120l},
542  {394240l,13305600l,806400l,145152l,21504l,201600l,19200l,8064l,21504l,725760l,268800l,887040l,2903040l},
543  {1330560l,19800l,302400l,1134l,8064l,6300l,800l,1l,8064l,45360l,151200l,332640l,1451520l},
544  {79833600l,6652800l,57600l,384l,23040l,14400l,86400l,20160l,7680l,17280l,172800l,190080l,1036800l},
545  {2l,1663200l,1l,12960l,1l,3600l,1l,25200l,1l,12960l,1l,158400l,1036800l},
546  {79833600l,6652800l,57600l,384l,23040l,14400l,86400l,20160l,7680l,17280l,172800l,190080l,1451520l},
547  {1330560l,19800l,302400l,1134l,8064l,6300l,800l,1l,8064l,45360l,151200l,332640l,2903040l},
548  {394240l,13305600l,806400l,145152l,21504l,201600l,19200l,8064l,21504l,725760l,268800l,887040l,8709120l},
549  {119750400l,9979200l,1814400l,108864l,241920l,151200l,129600l,30240l,241920l,544320l,907200l,3991680l,43545600l},
550  {479001600l,39916800l,7257600l,2177280l,967680l,604800l,518400l,604800l,967680l,2177280l,7257600l,39916800l,479001600l},
551  {1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l}
552 };
553 /* integer type must support max value = 479001600 */
554 
555 long gspdfn12[13][13] = {
556  {0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,1l,0l},
557  {1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,-1l,0l},
558  {509l,253l,25l,61l,29l,13l,1l,1l,-1l,-1l,-1l,1l,0l},
559  {50879l,5203l,907l,79l,239l,1l,-1l,-1l,-1l,1l,1l,-1l,0l},
560  {1093l,16973l,31l,29l,-17l,-3l,0l,1l,1l,-1l,-1l,1l,0l},
561  {1623019l,6787l,-1l,-443l,-43l,167l,11l,-1l,-1l,1l,1l,-1l,0l},
562  {655177l,0l,-809l,0l,31l,0l,-23l,0l,1l,0l,-1l,1l,0l},
563  {1623019l,-6787l,-1l,443l,-43l,-167l,11l,1l,-1l,-1l,1l,-1l,0l},
564  {1093l,-16973l,31l,-29l,-17l,3l,0l,-1l,1l,1l,-1l,1l,0l},
565  {50879l,-5203l,907l,-79l,239l,-1l,-1l,1l,-1l,-1l,1l,-1l,0l},
566  {509l,-253l,25l,-61l,29l,-13l,1l,-1l,-1l,1l,-1l,1l,0l},
567  {1l,-1l,1l,-1l,1l,-1l,1l,-1l,1l,-1l,1l,-1l,0l},
568  {0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l,0l}
569 };
570 /* integer type must support max value = 1623019 */
571 
572 long gspdfd12[13][13] = {
573  {1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,39916800l,1l},
574  {39916800l,3628800l,725760l,241920l,120960l,86400l,86400l,120960l,241920l,725760l,3628800l,3628800l,1l},
575  {9979200l,907200l,36288l,60480l,30240l,21600l,4320l,30240l,60480l,90720l,362880l,725760l,1l},
576  {13305600l,403200l,48384l,5376l,40320l,3200l,1152l,2688l,80640l,26880l,80640l,241920l,1l},
577  {19800l,151200l,378l,2016l,1260l,400l,1l,1008l,5040l,15120l,30240l,120960l,1l},
578  {6652800l,28800l,128l,5760l,2880l,14400l,2880l,960l,1920l,17280l,17280l,86400l,1l},
579  {1663200l,1l,4320l,1l,720l,1l,3600l,1l,1440l,1l,14400l,86400l,1l},
580  {6652800l,28800l,128l,5760l,2880l,14400l,2880l,960l,1920l,17280l,17280l,120960l,1l},
581  {19800l,151200l,378l,2016l,1260l,400l,1l,1008l,5040l,15120l,30240l,241920l,1l},
582  {13305600l,403200l,48384l,5376l,40320l,3200l,1152l,2688l,80640l,26880l,80640l,725760l,1l},
583  {9979200l,907200l,36288l,60480l,30240l,21600l,4320l,30240l,60480l,90720l,362880l,3628800l,1l},
584  {39916800l,3628800l,725760l,241920l,120960l,86400l,86400l,120960l,241920l,725760l,3628800l,39916800l,1l},
585  {1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l,1l}
586 };
587 /* integer type must support max value = 39916800 */
588 
589 
590 double gspdf12d[13][13] = {
591  NAN
592 };
593 
594 double gscdf12d[13][13] = {
595  NAN
596 };
597 
598 float gspdf12f[13][13] = {
599  NAN
600 };
601 
602 float gscdf12f[13][13] = {
603  NAN
604 };
605 
606 /* ] set up coefs from rational integers */
607 int gs12initd(void) {
608  for (int i = 0; i < 13; i++) {
609  for (int j = 0; j < 13; j++) {
610  gspdf12d[i][j] = ((double) gspdfn12[i][j])
611  / ((double) gspdfd12[i][j]);
612  gscdf12d[i][j] = ((double) gscdfn12[i][j])
613  / ((double) gscdfd12[i][j]);
614  }
615  }
616 }
617 
618 int gs12initf(void) {
619  for (int i = 0; i < 13; i++) {
620  for (int j = 0; j < 13; j++) {
621  gspdf12f[i][j] = ((float) gspdfn12[i][j])
622  / ((float) gspdfd12[i][j]);
623  gscdf12f[i][j] = ((float) gscdfn12[i][j])
624  / ((float) gscdfd12[i][j]);
625  }
626  }
627 }
628 
639 double LRd_gsn12_RAN(LR_obj *o) {
640  double six = 6.0;
641 
642  /* unroll "loop" */
643  return o->m.d + o->s.d * (
644  o->ud(o) + o->ud(o) + o->ud(o) + o->ud(o)
645  + o->ud(o) + o->ud(o) + o->ud(o) + o->ud(o)
646  + o->ud(o) + o->ud(o) + o->ud(o) + o->ud(o)
647  - six
648  );
649 }
650 
659 double LRd_gsn12_PDF(LR_obj *o, double x) {
660  double zero = 0.0, one = 1.0, six = 6.0;
661  double sa = one/o->s.d,
662  xx = sa * (x - o->m.d);
663 
664  if (isnan(gspdf12d[0][0])) gs12initd();
665 
666  if (xx <= -six || xx >= six) {
667  return zero;
668  } else {
669  int i = xx + six; /* truncate */
670  double xt = xx + six - i; /* translate to [0-1] */
671  double r = gspdf12d[i][12];
672  /* horners rule to evaluate polynomial */
673  for (int j = 11; j >= 0; j--) {
674  r = (gspdf12d[i][j] + xt*r);
675  }
676  return sa * r;
677  }
678 }
679 
688 double LRd_gsn12_CDF(LR_obj *o, double x) {
689  double zero = 0.0, one = 1.0, six = 6.0;
690  double sa = one/o->s.d,
691  xx = sa * (x - o->m.d);
692 
693  if (isnan(gscdf12d[0][0])) gs12initd();
694 
695  if (xx <= -six) {
696  return zero;
697  } else if (xx >= six) {
698  return one;
699  } else {
700  int i = xx + six; /* truncate */
701  double xt = xx + six - i; /* translate to [0-1] */
702  double r = gscdf12d[i][12];
703  /* horners rule to evaluate polynomial */
704  for (int j = 11; j >= 0; j--) {
705  r = (gscdf12d[i][j] + xt*r);
706  }
707  return r;
708  }
709 }
710 
722  float six = 6.0;
723 
724  /* unroll "loop" */
725  return o->m.f + o->s.f * (
726  o->uf(o) + o->uf(o) + o->uf(o) + o->uf(o)
727  + o->uf(o) + o->uf(o) + o->uf(o) + o->uf(o)
728  + o->uf(o) + o->uf(o) + o->uf(o) + o->uf(o)
729  - six
730  );
731 }
732 
741 float LRf_gsn12_PDF(LR_obj *o, float x) {
742  float zero = 0.0, one = 1.0, six = 6.0;
743  float sa = one/o->s.f,
744  xx = sa * (x - o->m.f);
745 
746  if (isnan(gspdf12f[0][0])) gs12initf();
747 
748  if (xx <= -six || xx >= six) {
749  return zero;
750  } else {
751  int i = xx + six; /* truncate */
752  float xt = xx + six - i; /* translate to [0-1] */
753  float r = gspdf12f[i][12];
754  /* horners rule to evaluate polynomial */
755  for (int j = 11; j >= 0; j--) {
756  r = (gspdf12f[i][j] + xt*r);
757  }
758  return sa * r;
759  }
760 }
761 
770 float LRf_gsn12_CDF(LR_obj *o, float x) {
771  float zero = 0.0, one = 1.0, six = 6.0;
772  float sa = one/o->s.f,
773  xx = sa * (x - o->m.f);
774 
775  if (isnan(gspdf12f[0][0])) gs12initf();
776 
777  if (xx <= -six) {
778  return zero;
779  } else if (xx >= six) {
780  return one;
781  } else {
782  int i = xx + six; /* truncate */
783  float xt = xx + six - i; /* translate to [0-1] */
784  float r = gscdf12f[i][12];
785  /* horners rule to evaluate polynomial */
786  for (int j = 11; j >= 0; j--) {
787  r = (gscdf12f[i][j] + xt*r);
788  }
789  return r;
790  }
791 }
792 
793 #ifdef __cplusplus
794 }
795 #endif
double LRd_gsn12_RAN(LR_obj *o)
LRd_gsn12_RAN(LR_obj *o) - double random g12 gaussian-like distribution closely matches a Gaussian/No...
Definition: LRgsn.c:639
float LRf_gsn2_CDF(LR_obj *o, float x)
LRf_gsn2_CDF(LR_obj *o, float x) - float gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:271
LR_val b
Definition: libran.h:139
double LRd_gsn4_PDF(LR_obj *o, double x)
LRd_gsn4_PDF(LR_obj *o, double x) - double gaussian-like (simple bell curve) probablity distribution ...
Definition: LRgsn.c:388
float LRf_gsn4_PDF(LR_obj *o, float x)
LRf_gsn4_PDF(LR_obj *o, float x) - float gaussian-like (simple bell curve) probablity distribution fu...
Definition: LRgsn.c:466
float LRf_gsn12_RAN(LR_obj *o)
LRf_gsn12_RAN(LR_obj *o) - float random g12 gaussian-like distribution closely matches a Gaussian/Nor...
Definition: LRgsn.c:721
float LRf_gsn2_RAN(LR_obj *o)
LRf_gsn2_RAN(LR_obj *o) - float random g2 gaussian-like (saw tooth) distribution. ...
Definition: LRgsn.c:234
double LRd_gsn2_RAN(LR_obj *o)
LRd_gsn2_RAN(LR_obj *o) - double random g2 gaussian-like (saw tooth) distribution.
Definition: LRgsn.c:169
float LRf_gsn12_CDF(LR_obj *o, float x)
LRf_gsn12_CDF(LR_obj *o, float x) - float gaussian-like (simple bell curve) cumulative distribution f...
Definition: LRgsn.c:770
double LRd_gsn2_PDF(LR_obj *o, double x)
LRd_gsn2_PDF(LR_obj *o, double x) - double gaussian-like (saw tooth) probablity distribution function...
Definition: LRgsn.c:183
double LRd_gsn12_PDF(LR_obj *o, double x)
LRd_gsn12_PDF(LR_obj *o, double x) - double gaussian-like (simple bell curve) probablity distribution...
Definition: LRgsn.c:659
double LRd_gsn2_CDF(LR_obj *o, double x)
LRd_gsn2_CDF(LR_obj *o, double x) - double gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:206
double LRd_gsn4_RAN(LR_obj *o)
LRd_gsn4_RAN(LR_obj *o) - double random g4 gaussian-like (simple bell curve) distribution.
Definition: LRgsn.c:373
double(* ud)(LR_obj *)
Definition: libran.h:154
float LRf_gsn2_PDF(LR_obj *o, float x)
LRf_gsn2_PDF(LR_obj *o, float x) - float gaussian-like (saw tooth) probablity distribution function...
Definition: LRgsn.c:248
LR_val s
Definition: libran.h:141
float LRf_gsn4_CDF(LR_obj *o, float x)
LRf_gsn4_CDF(LR_obj *o, float x) - float gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:496
LR_val a
Definition: libran.h:138
double d
Definition: libran.h:87
float f
Definition: libran.h:86
float(* uf)(LR_obj *)
Definition: libran.h:153
The LibRan common header file.
double LRd_gsn4_CDF(LR_obj *o, double x)
LRd_gsn4_CDF(LR_obj *o, double x) - double gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:418
the fundamental LibRan random variate distribution object
Definition: libran.h:134
LR_val m
Definition: libran.h:140
float LRf_gsn12_PDF(LR_obj *o, float x)
LRf_gsn12_PDF(LR_obj *o, float x) - float gaussian-like (simple bell curve) probablity distribution f...
Definition: LRgsn.c:741
float LRf_gsn4_RAN(LR_obj *o)
LRf_gsn4_RAN(LR_obj *o) - float random g4 gaussian-like (simple bell curve) distribution.
Definition: LRgsn.c:451
double LRd_gsn12_CDF(LR_obj *o, double x)
LRd_gsn12_CDF(LR_obj *o, double x) - double gaussian-like (simple bell curve) cumulative distribution...
Definition: LRgsn.c:688