Index: src/v8.cc |
=================================================================== |
--- src/v8.cc (revision 2155) |
+++ src/v8.cc (working copy) |
@@ -138,4 +138,27 @@ |
} |
+uint32_t V8::Random() { |
+ // Random number generator using George Marsaglia's |
+ // multiply-with-carry algorithm. |
+ static uint32_t hi = 0; |
+ static uint32_t lo = 0; |
Dean McNamee
2009/06/15 07:39:25
why not just static uint32_t hi = random() ?
|
+ |
+ // Initialize seed using the system random(). |
+ if (hi == 0) hi = random(); |
+ if (lo == 0) lo = random(); |
+ |
+ // Mix the bits. |
+ hi = 36969 * (hi & 0xFFFF) + (hi >> 16); |
+ lo = 18273 * (lo & 0xFFFF) + (lo >> 16); |
+ return (hi << 16) + (lo & 0xFFFF); |
+} |
+ |
+ |
+Smi* V8::RandomPositiveSmi() { |
+ uint32_t random = Random(); |
+ ASSERT(IsPowerOf2(Smi::kMaxValue + 1)); |
+ return Smi::FromInt(random & Smi::kMaxValue); |
+} |
+ |
} } // namespace v8::internal |