int initlogscale(long dmax, long rmax) { double dm = (double) dmax; double rm = (double) rmax; double x = 1.0, dx, y, yy, t; if (dm <= rm) return 0; do { t = shlog(dm, x); y = x * t - rm; yy = t - dm / (x + dm); dx = y / yy; x -= dx; /* printf("Alpha = %f\n", x); */ } while (abs(dx) > 1E-4); alpha = x; return 1; }
void shinfo(char *log_str) { shlog(SHLOG_INFO, 0, log_str); }
void shwarn(char *log_str) { shlog(SHLOG_WARNING, 0, log_str); }
void sherr(int err_code, char *log_str) { shlog(SHLOG_ERROR, err_code, log_str); }
long logscale(long d) { double r = alpha * shlog(d, alpha); return (long) floor(0.5 + r); }