[1910] in Athena Bugs

home help back first fref pref prev next nref lref last post

Saber gripe: v2.1. Beta2 (3/3/89 W20-575-35 vax Unix 2975 0)

daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Wed Mar 15 19:17:35 1989

Date: Wed, 15 Mar 89 19:16:31 EST
From: Jonathan I. Kamens <jik@ATHENA.MIT.EDU>
To: raeburn@ATHENA.MIT.EDU
Cc: bugs@ATHENA.MIT.EDU
In-Reply-To: Ken Raeburn's message of Wed, 15 Mar 89 17:17:46 EST <8903152217.AA04348@PROMETHEUS.MIT.EDU>
   Date: Wed, 15 Mar 89 17:17:46 EST
   From: Ken Raeburn <raeburn@ATHENA.MIT.EDU>

      From: <jik@ATHENA.MIT.EDU>
      Date: Wed, 15 Mar 89 00:17:28 EST

      I dismissed a run window in xsaver and got the following error
      in my main saber window:

      Saber internal (parsing) error (signal 12, Bad system call).
       (internal location 0x5b1be, 0x7fffe870)
      Trying to recover...

   Do you have a file or sequence of commands you can give me which
   demonstrates this problem?

   -- Ken

Yes.  The file below caused the problem.  I didn't write the code, it
was sent to me as part of an OLC question, so I know absolutely
nothing about it.

		      *************************

main()
{
  double maximize(), rroot(), groot(), integrate(), gfunct();
  double capacity, dissipation, longest, length, delay;
  double tolerance, left, right;
  tolerance = .0001;

  left = 8.5;                   
  right = 10.5;
  capacity = rroot(left, right, tolerance);
  printf("time when arrival rate equals capacity is %.1f\n\n", capacity);

  left = 9.0;                 
  dissipation = groot(left, right, tolerance);
  printf("time when the queue dissipates is %.1f\n\n", dissipation);

  left = 8.0;                
  longest = maximize(left, dissipation, tolerance);
  length = gfunct(longest);
  printf("time when the longest queue occurs is %.1f\n\n", longest);
  printf("length of longest queue is %.0f\n\n", length);
  
  delay = integrate(left, dissipation);
  printf("total dalay time is %.0f hours\n\n", delay);
}

double integrate(a, b)         /* Simpson's Rule */
double a, b;
{
  double gfunct();
  double dx, sum, x, integral;
  int n = 20;
  int i = 0;
  dx = (b-a)/n;
  sum = 0;
  x = a;
  while(i != n)
    {
      sum = sum + gfunct(x) + 4*gfunct(x+dx/2) + gfunct(x+dx);
      x = x+dx;
      i = i+1;
    }
  integral = sum*dx/6;
  return(integral);
}

double rroot(l, r, tolerance)    /* bisection */
double l, r, tolerance;
{
  double rfunct(); 
  double c;
  c = (l+r)/2;
  if ((r-l) <= tolerance)
    return(c);
  else if (rfunct(r)*rfunct(c) < 0.0)
    rroot(c, r, tolerance);
  else
    rroot(l, c, tolerance);
  return(c);
}

double groot (le, ri, tolerance)    /* bisection */
double le, ri, tolerance;
{
  double gfunct();
  double c;
  c = (le+ri)/2;
  if ((ri-le) <= tolerance)
    return(c);
  else if (gfunct(ri)*gfunct(c) < 0.0)
    groot(c, ri, tolerance);
  else 
    groot(le, c, tolerance);
  return(c);
}

double maximize(lef, rig, tolerance)
double lef, rig, tolerance;
{
  double gderiv();
  double m;
  m = (lef+rig)/2;
  if (gderiv(m) == 0.0 || (rig-lef) < tolerance)
    return(m);
  else if (gderiv(m) > 0.0)
    m = maximize(m, rig, tolerance);
  else
    m = maximize(lef, m, tolerance);
  return(m);
}

double rfunct(x)
double x;
{
  double r;
  r = -720*x*x + 12240*x - 44160;
  return (r);
}

double gfunct(t)
double t;
{
  double afunct();
  double g;
  g = afunct(t) - 3840*(t-8);
  return (g);
}  

double afunct(t)
double t;
{
  double a;
  a = -240*t*t*t + 6120*t*t -48000*t + 115200;
  return (a);
}

double gderiv(t)
double t;
{
  double aderiv();
  double d;
  d = aderiv(t) - 3840;
  return (d);
}

double aderiv(t)
double t;
{
  double d;
  d = -240*3*t*t + 6120*t -48000;
  return (d);
}

home help back first fref pref prev next nref lref last post