112 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
113 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
114 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
115 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
116 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
117 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
118 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
119 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
120 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
121 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
122 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
123 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
124 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
125 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
126 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
134 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
135 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
136 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
137 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
138 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
139 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
140 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
141 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
142 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
143 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
144 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
145 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
146 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
147 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
148 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
156 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
157 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
158 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
159 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
160 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
161 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
162 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
163 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
164 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
165 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
166 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
167 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
168 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
169 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
170 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
178 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
179 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
180 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
181 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
182 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
183 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
184 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
185 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
186 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
187 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
188 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
189 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
190 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
191 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
192 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
200 if (a == 0 || b == 0)
return 0;
203 if (a < b) { t = a; a = b; b = t; }
204 while ((t = a%b) > 1) { a = b; b = t; }
205 if (t)
return t;
else return b;
213 if (n == 0 || n == 1)
return t;
245 if (an == 0 || ad == 0) ad = 1;
246 if (bn == 0 || bd == 0) bd = 1;
248 *on = an*bd + bn*ad*x;
251 if (xx != 0 && xx != 1) {
275 if (an == 0 || ad == 0) ad = 1;
276 if (bn == 0 || bd == 0) bd = 1;
281 if (xx != 0 && xx != 1) {
299 printf(
"%s : %d >>> \n", DFstr, order);
300 for (
int j = 0; j <= order; j++) {
302 for (
int i = 0; i <= order; i++) {
304 printf(
"%+ld/%ld*x^%d",xn[j][i],xd[j][i],i);
320 printf(
"long %s%d[%d][%d] = {\n", DFstr, order, order+1, order+1);
321 for (
int j = 0; j <= order; j++) {
323 for (
int i = 0; i <= order; i++) {
324 printf(
"%ldl",xn[j][i]);
325 if (i < order) printf(
",");
326 LINT cc = (xn[j][i] < 0 ? -xn[j][i] : xn[j][i]);
331 if (j < order) printf(
",");
335 printf(
"/* integer type must support max value = %ld */\n\n", maxcoef);
347 extern LINT pn[NINT][NINT],
pd[NINT][NINT],
348 cn[NINT][NINT],
cd[NINT][NINT];
351 for (
int i = 0; i <= nn; i++) {
355 for (
int j = i; j <= nn; j++) {
359 for (
int k = 1; k <= nn; k++) {
367 LINT cc, maxint = 0, maxcoef = 0;
368 for (
int j = 0; j <= nn; j++) {
369 for (
int i = 0; i <= nn; i++) {
370 cc = (cn[j][i] < 0 ? -cn[j][i] : cn[j][i]);
374 &(cn[j][i]),&(cd[j][i]));
375 cc = (cn[j][i] < 0 ? -cn[j][i] : cn[j][i]);
378 cc = (cd[j][i] < 0 ? -cd[j][i] : cd[j][i]);
383 printf(
"max int = %ld\nmax coef = %ld\n" 384 "INT_MAX = %d\nLONG_MAX = %ld\nLLONG_MAX = %lld\n" 387 INT_MAX, LONG_MAX, LLONG_MAX, nn,
ifac(nn));
400 extern LINT pn[NINT][NINT],
pd[NINT][NINT],
401 cn[NINT][NINT],
cd[NINT][NINT];
403 for (
int j = 0; j <= nn; j++) {
404 for (
int i = 1; i <= nn; i++) {
406 &(pn[j][i-1]), &(pd[j][i-1]));
441 LINT tmpn[NINT], tmpd[NINT], zero = 0, one = 1;
442 for (
int j = 0; j <= nn; j++) {
444 for (
int i = 0; i <= nn; i++) {
449 for (
int m = 0; m <= nn; m++) {
454 for (
int k = nn-1; k >= m; k--) {
459 iadd(
icomb(k,k-m)*xn[j][k], xd[j][k], cn, cd,
466 for (
int i = 0; i <= nn; i++) {
477 for (
int j = 0; j <= nn; j++) {
480 LINT sn = zero, sd = one;
481 for (
int i = 0; i <= nn; i++) {
482 iadd(sn,sd, xn[j][i], xd[j][i], one, &sn, &sd);
484 printf(
"*** %d %ld/%ld\n", j, sn, sd);
486 printf(
"+++ %d %ld/%ld\n", j+1,
487 xn[j+1][0], xd[j+1][0]);
LINT pd[NINT][NINT]
PDF denominator.
void newpdf(int nn)
void newpdf(nn) calculate the new PDF of order nn by differentiating the CDF.
LINT cn[NINT][NINT]
CDF numerator.
LINT pn[NINT][NINT]
PDF numerator.
void imult(LINT an, LINT ad, LINT bn, LINT bd, LINT x, LINT *on, LINT *od)
void imult(an,ad,bn,bd, x, *on, *od) return a*b*x where a,b are represented as rationals ...
LINT igcd(LINT a, LINT b)
LINT igcd(LINT a, LINT b) return Greatest Common Denominator of a & b.
void newcdf(int nn)
void newcdf(nn) calculate the new CDF of order nn
long LINT
long integer type used for calculations.
LINT icomb(int n, int k)
LINT icomb(LINT n, LINT k) return binomial factor n!/[k!*(n-k)!].
void writedf(char *DFstr, int order, LINT xn[][NINT])
void writedf(DFstr, order, xn[][NINT]) output array as a C declaration
LINT cd[NINT][NINT]
CDF denominator.
void showdf(char *DFstr, int order, LINT xn[][NINT], LINT xd[][NINT])
void showdf(DFstr, order, xn[][NINT], xd[][NINT]) display the rational values of 'x'.
LINT ifac(int n)
LINT ifac(LINT n) return the factorial of n (n!)
void transint(int nn, LINT xn[][NINT], LINT xd[][NINT])
void transint(nn, xn[][NINT], xd[]{NINT]) translate each interval to [0,1)
void iadd(LINT an, LINT ad, LINT bn, LINT bd, LINT x, LINT *on, LINT *od)
void iadd(an,ad,bn,bd, x, *on, *od) return a + b*x where a,b are represented as rationals ...