tipc21/alrys/finalize.c

74 lines
1.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include "alryslib.c"
int main(int argc, char *argv[])
{
FILE *fp;
char *end;
long digits;
int i, j, k, kmax, size;
double v, s, smax, cmax, backup, first, delta;
double steps[1024];
errno = 0;
digits = (argc == 3) ? strtol(argv[1], &end, 10) : -1;
if(errno != 0 || end == argv[1] || digits < 2 || digits > 4)
{
fprintf(stderr, "Usage: finalize [2-4] input_file\n");
return EXIT_FAILURE;
}
if((fp = fopen(argv[2], "r")) == NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return EXIT_FAILURE;
}
input(fp, steps, &size);
smax = score(steps, size);
fprintf(stderr, "%f\n", smax);
first = -pow(10, -digits + 2);
delta = pow(10, -digits);
for(i = 0; i < 100; ++i)
{
kmax = -1;
cmax = -1.0;
for(k = 8; k < size - 4; k += 2)
{
backup = steps[k];
for(j = 0; j < 201; ++j)
{
v = first + j * delta;
steps[k] = backup + v;
s = score(steps, size);
if(smax < s)
{
fprintf(stderr, "%f\n", s);
smax = s;
kmax = k;
cmax = backup + v;
}
}
steps[k] = backup;
}
if(kmax < 0) break;
steps[kmax] = cmax;
}
smax = score(steps, size);
fprintf(stderr, "-> %f\n", smax);
output(steps, size);
return EXIT_SUCCESS;
}