-/* NetHack 3.6 rnd.c $NHDT-Date: 1432512767 2015/05/25 00:12:47 $ $NHDT-Branch: master $:$NHDT-Revision: 1.15 $ */
+/* NetHack 3.6 rnd.c $NHDT-Date: 1446883921 2015/11/07 08:12:01 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */
/* NetHack may be freely redistributed. See license for details. */
#include "hack.h"
#define RND(x) (rand() % x)
#else /* LINT */
#if defined(UNIX) || defined(RANDOM)
-#define RND(x) (int)(Rand() % (long) (x))
+#define RND(x) ((int) (Rand() % (long) (x)))
#else
/* Good luck: the bottom order bits are cyclic. */
-#define RND(x) (int)((Rand() >> 3) % (x))
+#define RND(x) ((int) ((Rand() >> 3) % (x)))
#endif
#endif /* LINT */
-int rn2(x) /* 0 <= rn2(x) < x */
+/* 0 <= rn2(x) < x */
+int
+rn2(x)
register int x;
{
#ifdef BETA
if (x <= 0) {
- debugpline1("rn2(%d) attempted", x);
- return (0);
+ impossible("rn2(%d) attempted", x);
+ return 0;
}
x = RND(x);
- return (x);
+ return x;
#else
- return (RND(x));
+ return RND(x);
#endif
}
-int rnl(x) /* 0 <= rnl(x) < x; sometimes subtracting Luck */
-register int x; /* good luck approaches 0, bad luck approaches (x-1) */
+/* 0 <= rnl(x) < x; sometimes subtracting Luck;
+ good luck approaches 0, bad luck approaches (x-1) */
+int
+rnl(x)
+register int x;
{
register int i, adjustment;
#ifdef BETA
if (x <= 0) {
- debugpline1("rnl(%d) attempted", x);
- return (0);
+ impossible("rnl(%d) attempted", x);
+ return 0;
}
#endif
of integer division involving negative values */
adjustment = (abs(adjustment) + 1) / 3 * sgn(adjustment);
/*
- * 11..13 -> 4
- * 8..10 -> 3
- * 5.. 7 -> 2
- * 2.. 4 -> 1
- * -1,0,1 -> 0 (no adjustment)
- * -4..-2 -> -1
- * -7..-5 -> -2
- * -10..-8 -> -3
- * -13..-11-> -4
+ * 11..13 -> 4
+ * 8..10 -> 3
+ * 5.. 7 -> 2
+ * 2.. 4 -> 1
+ * -1,0,1 -> 0 (no adjustment)
+ * -4..-2 -> -1
+ * -7..-5 -> -2
+ * -10..-8 -> -3
+ * -13..-11-> -4
*/
}
return i;
}
-int rnd(x) /* 1 <= rnd(x) <= x */
+/* 1 <= rnd(x) <= x */
+int
+rnd(x)
register int x;
{
#ifdef BETA
if (x <= 0) {
- debugpline1("rnd(%d) attempted", x);
- return (1);
+ impossible("rnd(%d) attempted", x);
+ return 1;
}
- x = RND(x) + 1;
- return (x);
-#else
- return (RND(x) + 1);
#endif
+ x = RND(x) + 1;
+ return x;
}
-int d(n, x) /* n <= d(n,x) <= (n*x) */
+/* d(N,X) == NdX == dX+dX+...+dX N times; n <= d(n,x) <= (n*x) */
+int d(n, x)
register int n, x;
{
register int tmp = n;
#ifdef BETA
if (x < 0 || n < 0 || (x == 0 && n != 0)) {
- debugpline2("d(%d,%d) attempted", n, x);
- return (1);
+ impossible("d(%d,%d) attempted", n, x);
+ return 1;
}
#endif
while (n--)
tmp += RND(x);
- return (tmp); /* Alea iacta est. -- J.C. */
+ return tmp; /* Alea iacta est. -- J.C. */
}
+/* 1 <= rne(x) <= max(u.ulevel/3,5) */
int
rne(x)
register int x;
return tmp;
/* was:
- * tmp = 1;
- * while(!rn2(x)) tmp++;
- * return(min(tmp,(u.ulevel < 15) ? 5 : u.ulevel/3));
+ * tmp = 1;
+ * while (!rn2(x))
+ * tmp++;
+ * return min(tmp, (u.ulevel < 15) ? 5 : u.ulevel / 3);
* which is clearer but less efficient and stands a vanishingly
* small chance of overflowing tmp
*/
}
+/* rnz: everyone's favorite! */
int
rnz(i)
int i;
int x = i;
int tmp = 1000;
#else
- register long x = i;
- register long tmp = 1000;
+ register long x = (long) i;
+ register long tmp = 1000L;
#endif
+
tmp += rn2(1000);
tmp *= rne(4);
if (rn2(2)) {
x *= 1000;
x /= tmp;
}
- return ((int) x);
+ return (int) x;
}
/*rnd.c*/