#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(n, [this]() { return Rand32(); }); } uint64 SimplePhilox::Uniform64(uint64 n) { return ExactUniformInt(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(0) : (1 << shift) - 1; return Rand32() & mask; } } // namespace random } // namespace tensorflow