site read_next_site(long j){ int i=0, k=0; static char buf[100], *s; if (j!=-1) p = new_site(p,j); if (j!=0) while ((s=fgets(buf,sizeof(buf),INFILE))) { if (buf[0]=='%') continue; for (k=0; buf[k] && isspace(buf[k]); k++); if (buf[k]) break; } if (!s) return 0; while (buf[k]) { while (buf[k] && isspace(buf[k])) k++; if (buf[k] && j!=-1) { if (sscanf(buf+k,"%lf",p+i)==EOF) { fprintf(DFILE, "bad input line: %s\n", buf); exit(1); } p[i] = floor(mult_up*p[i]+0.5); mins[i] = (mins[i]<p[i]) ? mins[i] : p[i]; maxs[i] = (maxs[i]>p[i]) ? maxs[i] : p[i]; } if (buf[k]) i++; while (buf[k] && !isspace(buf[k])) k++; } if (!dim) dim = i; if (i!=dim) {DEB(-10,inconsistent input);DEBTR(-10); exit(1);} return p; }
static double sc(basis_s *v,simplex *s, int k, int j) { /* amount by which to scale up vector, for reduce_inner */ double labound; static int lscale; static double max_scale, ldetbound, Sb; if (j<10) { labound = logb(v->sqa)/2; max_scale = exact_bits - labound - 0.66*(k-2)-1 -DELIFT; if (max_scale<1) { warning(-10, overshot exact arithmetic); max_scale = 1; } if (j==0) { int i; neighbor *sni; basis_s *snib; ldetbound = DELIFT; Sb = 0; for (i=k-1,sni=s->neigh+k-1;i>0;i--,sni--) { snib = sni->basis; Sb += snib->sqb; ldetbound += logb(snib->sqb)/2 + 1; ldetbound -= snib->lscale; } } } if (ldetbound - v->lscale + logb(v->sqb)/2 + 1 < 0) { DEBS(-2) DEBTR(-2) DEBEXP(-2, ldetbound) print_simplex_f(s, DFILE, &print_neighbor_full); print_basis(DFILE,v); EDEBS return 0; } else {