]>
Commit | Line | Data |
---|---|---|
5b2abdfb A |
1 | /* |
2 | * Copyright (c) 1993 Martin Birgmeier | |
3 | * All rights reserved. | |
4 | * | |
5 | * You may redistribute unmodified or modified versions of this source | |
6 | * code provided that the above copyright notice and this and the | |
7 | * following conditions are retained. | |
8 | * | |
9 | * This software is provided ``as is'', and comes with no warranties | |
10 | * of any kind. I shall in no event be liable for anything that happens | |
11 | * to anyone/anything when using this software. | |
12 | */ | |
13 | ||
14 | #include "rand48.h" | |
15 | ||
16 | unsigned short _rand48_seed[3] = { | |
17 | RAND48_SEED_0, | |
18 | RAND48_SEED_1, | |
19 | RAND48_SEED_2 | |
20 | }; | |
21 | unsigned short _rand48_mult[3] = { | |
22 | RAND48_MULT_0, | |
23 | RAND48_MULT_1, | |
24 | RAND48_MULT_2 | |
25 | }; | |
26 | unsigned short _rand48_add = RAND48_ADD; | |
27 | ||
28 | void | |
29 | _dorand48(unsigned short xseed[3]) | |
30 | { | |
31 | unsigned long accu; | |
32 | unsigned short temp[2]; | |
33 | ||
34 | accu = (unsigned long) _rand48_mult[0] * (unsigned long) xseed[0] + | |
35 | (unsigned long) _rand48_add; | |
36 | temp[0] = (unsigned short) accu; /* lower 16 bits */ | |
37 | accu >>= sizeof(unsigned short) * 8; | |
38 | accu += (unsigned long) _rand48_mult[0] * (unsigned long) xseed[1] + | |
39 | (unsigned long) _rand48_mult[1] * (unsigned long) xseed[0]; | |
40 | temp[1] = (unsigned short) accu; /* middle 16 bits */ | |
41 | accu >>= sizeof(unsigned short) * 8; | |
42 | accu += _rand48_mult[0] * xseed[2] + _rand48_mult[1] * xseed[1] + _rand48_mult[2] * xseed[0]; | |
43 | xseed[0] = temp[0]; | |
44 | xseed[1] = temp[1]; | |
45 | xseed[2] = (unsigned short) accu; | |
46 | } |