lran2.h 782 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /* lran2.h
  2. * by Wolfram Gloger 1996.
  3. *
  4. * A small, portable pseudo-random number generator.
  5. */
  6. #ifndef _LRAN2_H
  7. #define _LRAN2_H
  8. #define LRAN2_MAX 714025l /* constants for portable */
  9. #define IA 1366l /* random number generator */
  10. #define IC 150889l /* (see e.g. `Numerical Recipes') */
  11. struct lran2_st {
  12. long x, y, v[97];
  13. };
  14. static void
  15. lran2_init(struct lran2_st* d, long seed)
  16. {
  17. long x;
  18. int j;
  19. x = (IC - seed) % LRAN2_MAX;
  20. if(x < 0) x = -x;
  21. for(j=0; j<97; j++) {
  22. x = (IA*x + IC) % LRAN2_MAX;
  23. d->v[j] = x;
  24. }
  25. d->x = (IA*x + IC) % LRAN2_MAX;
  26. d->y = d->x;
  27. }
  28. static
  29. long lran2(struct lran2_st* d)
  30. {
  31. long j = (d->y % 97);
  32. d->y = d->v[j];
  33. d->x = (IA*d->x + IC) % LRAN2_MAX;
  34. d->v[j] = d->x;
  35. return d->y;
  36. }
  37. #undef IA
  38. #undef IC
  39. #endif /* _LRAN2_H */