#include <stdio.h>

int m = 2147483647,
   a1 = 107374182,    q1 = 20,      r1 = 7,
   a5 = 104480,       q5 = 20554,   r5 = 1727,
   x1, x2, x3, x4 ,x5;
double Invmp1 = 4.656612873077393e-10;

void
InitRandom(void)
{
  x1 = 1;
  x2 = 2;
  x3 = 3;
  x4 = 4;
  x5 = 5;
}

int
Random (void)
{
 int h, p1, p5;

 h = x5 / q5;
 p5 = a5 * (x5 - h * q5) - h * r5;

 x5 = x4; x4 = x3; x3 = x2; x2 = x1;

 h = x1 / q1; 
 p1 = a1 * (x1 - h * q1) - h * r1;

 if (p1 < 0) p1 = p1 + m;
 if (p5 > 0) p5 = p5 - m;

 x1 = p1 + p5;
 if (x1 < 0 ) x1 = x1 + m;

 return x1;
}

double
Uniform01 (void)
{
  int Z;
  Z = Random();
  if (Z == 0) Z = m;
  return (Z * Invmp1);
}

int
main(void)
{
  int i;
  double z;

  InitRandom();

  for (i=0; i<=10; i++)
    {
      z = Uniform01();
      printf("%10ld:\t%25.15e\n", i, z);
    }

  return 0;

}



