| Index: src/v8.cc
|
| ===================================================================
|
| --- src/v8.cc (revision 4383)
|
| +++ src/v8.cc (working copy)
|
| @@ -210,11 +210,13 @@
|
| double_int_union* r = reinterpret_cast<double_int_union*>(
|
| reinterpret_cast<char*>(heap_number) +
|
| HeapNumber::kValueOffset - kHeapObjectTag);
|
| - // Create a random number between 0.0 and 1.0 by putting random bits into
|
| - // the mantissa of 1.0 and subtracting 1.0.
|
| - r->double_value = 1.0;
|
| - r->uint64_t_value |= (random_bits << 20);
|
| - r->double_value -= 1.0; // Force into the range [0.0, 1.0).
|
| + // Convert 32 random bits to 0.(32 random bits) in a double
|
| + // by computing:
|
| + // ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)).
|
| + const double binary_million = 1048576.0;
|
| + r->double_value = binary_million;
|
| + r->uint64_t_value |= random_bits;
|
| + r->double_value -= binary_million;
|
|
|
| return heap_number;
|
| }
|
|
|