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; |
} |