diff options
author | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-05 02:22:11 +0000 |
---|---|---|
committer | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-05 02:22:11 +0000 |
commit | 780702c2aac603a5ca09c22e34d3f913a375627d (patch) | |
tree | 9eec20da47f64859a072a8ca2ca03823953e5d52 /base/rand_util.cc | |
parent | 8dc0234a8d2cec8bb1979ec8dec05bf23a79a42a (diff) | |
download | chromium_src-780702c2aac603a5ca09c22e34d3f913a375627d.zip chromium_src-780702c2aac603a5ca09c22e34d3f913a375627d.tar.gz chromium_src-780702c2aac603a5ca09c22e34d3f913a375627d.tar.bz2 |
Add one-time randomization support for FieldTrial, and the ability to
disable field trials. I am going to have a need for both soon.
Cleaning up some comments about empty trial names, adding static
method TrialExists() and simplifying many call sites by using this
method.
While I'm in there and needing base/OWNERS approval, add an OWNERS
file for base/metrics that adds jar@chromium.org as an owner for that
directory.
BUG=none
TEST=base_unittests
TBR=jam@chromium.org
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84197 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/rand_util.cc')
-rw-r--r-- | base/rand_util.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/base/rand_util.cc b/base/rand_util.cc index a71bb0c..b823fa0 100644 --- a/base/rand_util.cc +++ b/base/rand_util.cc @@ -24,6 +24,10 @@ int RandInt(int min, int max) { } double RandDouble() { + return BitsToOpenEndedUnitInterval(base::RandUint64()); +} + +double BitsToOpenEndedUnitInterval(uint64 bits) { // We try to get maximum precision by masking out as many bits as will fit // in the target type's mantissa, and raising it to an appropriate power to // produce output in the range [0, 1). For IEEE 754 doubles, the mantissa @@ -31,7 +35,7 @@ double RandDouble() { COMPILE_ASSERT(std::numeric_limits<double>::radix == 2, otherwise_use_scalbn); static const int kBits = std::numeric_limits<double>::digits; - uint64 random_bits = base::RandUint64() & ((GG_UINT64_C(1) << kBits) - 1); + uint64 random_bits = bits & ((GG_UINT64_C(1) << kBits) - 1); double result = ldexp(static_cast<double>(random_bits), -1 * kBits); DCHECK_GE(result, 0.0); DCHECK_LT(result, 1.0); |