pike.git
/
src
/
builtin.cmod
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/builtin.cmod:2077:
} /*! @decl int random(int max) *! *! This function returns a random number in the range @expr{0 .. @[max]-1@}. *! *! @seealso *! @[random_seed()] */
-
/*! @decl float random(float max)
-
*!
-
*! This function returns a random number in the range @expr{0 .. @[max]-ɛ@}.
-
*!
-
*! @seealso
-
*! @[random_seed()]
-
*/
-
+
PMOD_EXPORT PIKEFUN int random(int i) { if(i <= 0) RETURN 0; #if SIZEOF_INT_TYPE > 4 if(i >> 31) RETURN my_rand64() % i; #endif RETURN my_rand() % i; }
-
+
/*! @decl float random(float max)
+
*!
+
*! This function returns a random number in the range @expr{0 .. @[max]-ɛ@}.
+
*!
+
*! @seealso
+
*! @[random_seed()]
+
*/
+
PMOD_EXPORT PIKEFUN float random(float f) { if(f<=0.0) RETURN 0.0;
-
#define N 1048576
-
RETURN f * (my_rand()%N/((float)N)) +
-
f * (my_rand()%N/( ((float)N) * ((float)N) ));
+
-
+
#define MASK ((1L<<32)-1)
+
RETURN (float)(f * (((my_rand()&MASK)-1) / (double)MASK));
} /*! @decl mixed random(array|multiset x) *! Returns a random element from @[x]. */ PMOD_EXPORT PIKEFUN mixed random(array a) rawtype tFunc(tArr(tSetvar(0,tMix)),tVar(0)); {