Are you cross compiling? I don't understand how the double binary_million value can be reversed.
Try replacing const double binary_million = 1048576.0; with some manual 64bit correct (for your system) floating point value (cast a known 64bit value to a double) instead. Then check again your math.random and check with gdb that you are actually going through this function. On Wed, Jan 12, 2011 at 3:13 PM, Guillaume <[email protected]> wrote: > Hi. > > Thx for your answer. > > I'm afraid I get : 5.333806864e-315 with step 1. > ## > Object* V8::FillHeapNumberWithRandom(Object* heap_number) { > // uint64_t random_bits = Random(); > // Make a double* from address (heap_number + sizeof(double)). > double_int_union* r = reinterpret_cast<double_int_union*>( > reinterpret_cast<char*>(heap_number) + > HeapNumber::kValueOffset - kHeapObjectTag); > // 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; > } > ## > > I try step 2 for fun, and I get 1.7422461335011523e+41. > > Guillaume > > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
