diff --git a/src/random_lcg.cpp b/src/random_lcg.cpp index 5bdedc59083..1faf8306026 100644 --- a/src/random_lcg.cpp +++ b/src/random_lcg.cpp @@ -1,7 +1,5 @@ #include "openmc/random_lcg.h" -#include - namespace openmc { // Starting seed @@ -78,8 +76,9 @@ double prn(uint64_t* seed) ((*seed >> ((*seed >> 59u) + 5u)) ^ *seed) * 12605985483714917081ull; uint64_t result = (word >> 43u) ^ word; - // Convert output from unsigned integer to double - return ldexp(result, -64); + // Convert output from unsigned integer to double. Multiplying by an exact + // power of two gives the same result as ldexp but avoids a library call. + return static_cast(result) * 0x1p-64; } //==============================================================================