aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/lib/random/simple_philox.cc
blob: 1035e1f017c58768633aa83058659bd6fa80a7ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "tensorflow/core/lib/random/simple_philox.h"
#include "tensorflow/core/lib/random/exact_uniform_int.h"
#include "tensorflow/core/platform/logging.h"

namespace tensorflow {
namespace random {

uint32 SimplePhilox::Uniform(uint32 n) {
  return ExactUniformInt<uint32>(n, [this]() { return Rand32(); });
}

uint64 SimplePhilox::Uniform64(uint64 n) {
  return ExactUniformInt<uint64>(n, [this]() { return Rand64(); });
}

uint32 SimplePhilox::Skewed(int max_log) {
  CHECK(0 <= max_log && max_log <= 32);
  const int shift = Rand32() % (max_log + 1);
  const uint32 mask = shift == 32 ? ~static_cast<uint32>(0) : (1 << shift) - 1;
  return Rand32() & mask;
}

}  // namespace random
}  // namespace tensorflow