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