Tested on amd64, i386 (qemu), big-endian powerpc64 (qemu). I spot-checked that the new implementation produces the same values as the old one.
Below are timing differences for a program which generates 100000000 numbers from a random seed. The new implementation is faster in all cases, especially for drand48() and erand48(), which are implemented by converting the LCG output to a floating point number in the range [0, 1).
```
Using seed: 533733328
unmodified drand48:
1.05 real 1.05 user 0.00 sys
1.07 real 1.07 user 0.00 sys
1.04 real 1.04 user 0.00 sys
1.05 real 1.04 user 0.00 sys
1.07 real 1.07 user 0.00 sys
modified drand48:
0.53 real 0.53 user 0.00 sys
0.56 real 0.56 user 0.00 sys
0.57 real 0.57 user 0.00 sys
0.53 real 0.53 user 0.00 sys
0.57 real 0.57 user 0.00 sys
unmodified erand48:
1.09 real 1.09 user 0.00 sys
1.09 real 1.09 user 0.00 sys
1.09 real 1.09 user 0.00 sys
1.08 real 1.08 user 0.00 sys
1.07 real 1.07 user 0.00 sys
modified erand48:
0.76 real 0.75 user 0.00 sys
0.75 real 0.75 user 0.00 sys
0.75 real 0.75 user 0.00 sys
0.76 real 0.76 user 0.00 sys
0.76 real 0.76 user 0.00 sys
unmodified lrand48:
0.32 real 0.32 user 0.00 sys
0.32 real 0.32 user 0.00 sys
0.32 real 0.32 user 0.00 sys
0.33 real 0.33 user 0.00 sys
0.35 real 0.35 user 0.00 sys
modified lrand48:
0.23 real 0.23 user 0.00 sys
0.24 real 0.24 user 0.00 sys
0.24 real 0.24 user 0.00 sys
0.22 real 0.22 user 0.00 sys
0.23 real 0.23 user 0.00 sys
unmodified nrand48:
0.57 real 0.57 user 0.00 sys
0.59 real 0.59 user 0.00 sys
0.59 real 0.59 user 0.00 sys
0.54 real 0.54 user 0.00 sys
0.59 real 0.59 user 0.00 sys
modified nrand48:
0.50 real 0.50 user 0.00 sys
0.54 real 0.54 user 0.00 sys
0.50 real 0.50 user 0.00 sys
0.50 real 0.50 user 0.00 sys
0.55 real 0.55 user 0.00 sys
unmodified mrand48:
0.46 real 0.46 user 0.00 sys
0.48 real 0.48 user 0.00 sys
0.51 real 0.51 user 0.00 sys
0.46 real 0.46 user 0.00 sys
0.51 real 0.51 user 0.00 sys
modified mrand48:
0.20 real 0.20 user 0.00 sys
0.23 real 0.23 user 0.00 sys
0.22 real 0.22 user 0.00 sys
0.23 real 0.23 user 0.00 sys
0.20 real 0.20 user 0.00 sys
unmodified jrand48:
0.67 real 0.67 user 0.00 sys
0.76 real 0.76 user 0.00 sys
0.70 real 0.70 user 0.00 sys
0.69 real 0.69 user 0.00 sys
0.71 real 0.71 user 0.00 sys
modified jrand48:
0.53 real 0.53 user 0.00 sys
0.49 real 0.49 user 0.00 sys
0.49 real 0.49 user 0.00 sys
0.51 real 0.51 user 0.00 sys
0.53 real 0.53 user 0.00 sys
```