simple_philox.cc revision f41959ccb2d9d4c722fe8fc3351401d53bcf4900
1#include "tensorflow/core/lib/random/simple_philox.h"
2#include "tensorflow/core/lib/random/exact_uniform_int.h"
3#include "tensorflow/core/platform/logging.h"
4
5namespace tensorflow {
6namespace random {
7
8uint32 SimplePhilox::Uniform(uint32 n) {
9  return ExactUniformInt<uint32>(n, [this]() { return Rand32(); });
10}
11
12uint64 SimplePhilox::Uniform64(uint64 n) {
13  return ExactUniformInt<uint64>(n, [this]() { return Rand64(); });
14}
15
16uint32 SimplePhilox::Skewed(int max_log) {
17  CHECK(0 <= max_log && max_log <= 32);
18  const int shift = Rand32() % (max_log + 1);
19  const uint32 mask = shift == 32 ? ~static_cast<uint32>(0) : (1 << shift) - 1;
20  return Rand32() & mask;
21}
22
23}  // namespace random
24}  // namespace tensorflow
25