#include <stdio.h>
int pr_twenty = 94131;
int pr_max = 99265;
int pr_min = 96534;
int pr_fin = 97271;
#define MAX 13
#define UNIT 3
#define HALF (UNIT * 50)
#define ROUNDUP(x, y) ((((x) + (y) - 1)/(y)) * (y))
int pivot_basis, pivot_pr[4], pivot_offset[4];
char *pivot_names[] = {
"2nd supp",
"1st supp",
"1st resi",
"2nd resi"
};
char *
get_name(int offset)
{
int i;
for (i=0; i < 4; i++)
if (pivot_offset[i] == offset)
return pivot_names[i];
return "";
}
int
main(int argc, char *argv[])
{
int i;
int val[2], diff[2], off[2], per[2];
int temp;
char *name[2], sign;
printf("%10d.%02d = 20 line\n\n", pr_twenty/ 100, pr_twenty % 100);
pivot_basis = (pr_max + pr_min + pr_fin) / 3;
pivot_pr[0] = pivot_basis - pr_max + pr_min;
pivot_pr[1] = 2 * pivot_basis - pr_max;
pivot_pr[2] = 2 * pivot_basis - pr_min;
pivot_pr[3] = pivot_basis + pr_max - pr_min;
for (i=3; i >= 0; i--) {
temp = pivot_offset[i] = pivot_pr[i] - pr_fin;
sign = (temp > 0) ? '+' : '-';
temp = (temp > 0) ? temp : -temp;
printf("%10d.%02d : %c%2d.%02d : %s\n",
pivot_pr[i]/ 100, pivot_pr[i] % 100,
sign,
temp / 100, temp % 100,
pivot_names[i]);
if (pivot_offset[i] > 0)
pivot_offset[i] =
ROUNDUP(pivot_offset[i] - HALF, HALF*2);
else {
pivot_offset[i] =
-ROUNDUP(-pivot_offset[i] - HALF, HALF*2);
}
}
printf("\n");
for (i=0; i <= MAX; i++) {
diff[0] = UNIT * (i - MAX);
off[0] = 100 * diff[0] + pr_fin;
val[0] = pr_twenty * 19 + off[0];
val[0] /= 20;
per[0] = off[0] * 10000 / val[0];
name[0] = get_name(100 * diff[0]);
diff[1] = UNIT * i;
off[1] = 100 * diff[1] + pr_fin;
val[1] = pr_twenty * 19 + off[1];
val[1] /= 20;
per[1] = off[1] * 10000 / val[1];
name[1] = get_name(100 * diff[1]);
printf("%4d.%04d %4d.%02d %4d %8s | ",
per[0]/10000, per[0] %10000,
off[0]/100, off[0]%100,
diff[0], name[0]);
printf("%8s %4d %4d.%02d %4d.%04d \n",
name[1], diff[1],
off[1]/100, off[1]%100,
per[1]/10000, per[1] %10000);
}
return 0;
}