MCPcopy Create free account
hub / github.com/numpy/numpy / rk_interval

Function rk_interval

numpy/random/src/mt19937/randomkit.c:447–477  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

445}
446
447unsigned long rk_interval(unsigned long max, rk_state *state) {
448 unsigned long mask = max, value;
449
450 if (max == 0) {
451 return 0;
452 }
453 /* Smallest bit mask >= max */
454 mask |= mask >> 1;
455 mask |= mask >> 2;
456 mask |= mask >> 4;
457 mask |= mask >> 8;
458 mask |= mask >> 16;
459#if ULONG_MAX > 0xffffffffUL
460 mask |= mask >> 32;
461#endif
462
463 /* Search a random value in [0..mask] <= max */
464#if ULONG_MAX > 0xffffffffUL
465 if (max <= 0xffffffffUL) {
466 while ((value = (rk_random(state) & mask)) > max)
467 ;
468 } else {
469 while ((value = (rk_ulong(state) & mask)) > max)
470 ;
471 }
472#else
473 while ((value = (rk_ulong(state) & mask)) > max)
474 ;
475#endif
476 return value;
477}
478
479double rk_double(rk_state *state) {
480 /* shifts : 67108864 = 0x4000000, 9007199254740992 = 0x20000000000000 */

Callers

nothing calls this directly

Calls 2

rk_randomFunction · 0.85
rk_ulongFunction · 0.85

Tested by

no test coverage detected