abstract
| - Below is the full text to rnd.c from the source code of NetHack 2.3e. To link to a particular line, write [[NetHack 2.3e/rnd.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)rnd.c 2.3 87/12/12 2. */ 3. #include "config.h" 4. /* rand() is either random() or lrand48() - see config.h. */ 5. #ifdef UNIX 6. #define RND(x) (rand() % (x)) 7. #else 8. /* Good luck: the bottom order bits are cyclic. */ 9. #define RND(x) ((rand()>>3) % (x)) 10. #endif 11. 12. rn1(x,y) /* y <= rn1(x,y) < (y+x) */ 13. register x,y; 14. { 15. return(RND(x)+y); 16. } 17. 18. rn2(x) /* 0 <= rn2(x) < x */ 19. register x; 20. { 21. return(RND(x)); 22. } 23. 24. rnd(x) /* 1 <= rnd(x) <= x */ 25. register x; 26. { 27. return(RND(x)+1); 28. } 29. 30. d(n,x) /* n <= d(n,x) <= (n*x) */ 31. register n,x; 32. { 33. register tmp = n; 34. 35. while(n--) tmp += RND(x); 36. return(tmp); 37. } 38. 39. rne(x) /* by stewr 870807 */ 40. register x; 41. { 42. register tmp = 1; 43. while(!rn2(x)) tmp++; 44. return(tmp); 45. } 46. 47. rnz(i) 48. int i; 49. { 50. register long x = i; 51. register long tmp = 1000; 52. tmp += rn2(1000); 53. tmp *= rne(4); 54. if (rn2(2)) { x *= tmp; x /= 1000; } 55. else { x *= 1000; x /= tmp; } 56. return((int)x); 57. }
|