Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/gen/_rand48.c
| /* | /* | ||||
| * Copyright (c) 1993 Martin Birgmeier | * Copyright (c) 1993 Martin Birgmeier | ||||
| * All rights reserved. | * All rights reserved. | ||||
| * | * | ||||
| * You may redistribute unmodified or modified versions of this source | * You may redistribute unmodified or modified versions of this source | ||||
| * code provided that the above copyright notice and this and the | * code provided that the above copyright notice and this and the | ||||
| * following conditions are retained. | * following conditions are retained. | ||||
| * | * | ||||
| * This software is provided ``as is'', and comes with no warranties | * This software is provided ``as is'', and comes with no warranties | ||||
| * of any kind. I shall in no event be liable for anything that happens | * of any kind. I shall in no event be liable for anything that happens | ||||
| * to anyone/anything when using this software. | * to anyone/anything when using this software. | ||||
| */ | */ | ||||
| #include "rand48.h" | #include "rand48.h" | ||||
| unsigned short _rand48_seed[3] = { | uint48 _rand48_seed = RAND48_SEED; | ||||
| RAND48_SEED_0, | uint48 _rand48_mult = RAND48_MULT; | ||||
| RAND48_SEED_1, | uint48 _rand48_add = RAND48_ADD; | ||||
| RAND48_SEED_2 | |||||
| }; | |||||
| unsigned short _rand48_mult[3] = { | |||||
| RAND48_MULT_0, | |||||
| RAND48_MULT_1, | |||||
| RAND48_MULT_2 | |||||
| }; | |||||
| unsigned short _rand48_add = RAND48_ADD; | |||||
| void | |||||
| _dorand48(unsigned short xseed[3]) | |||||
| { | |||||
| unsigned long accu; | |||||
| unsigned short temp[2]; | |||||
| accu = (unsigned long) _rand48_mult[0] * (unsigned long) xseed[0] + | |||||
| (unsigned long) _rand48_add; | |||||
| temp[0] = (unsigned short) accu; /* lower 16 bits */ | |||||
| accu >>= sizeof(unsigned short) * 8; | |||||
| accu += (unsigned long) _rand48_mult[0] * (unsigned long) xseed[1] + | |||||
| (unsigned long) _rand48_mult[1] * (unsigned long) xseed[0]; | |||||
| temp[1] = (unsigned short) accu; /* middle 16 bits */ | |||||
| accu >>= sizeof(unsigned short) * 8; | |||||
| accu += _rand48_mult[0] * xseed[2] + _rand48_mult[1] * xseed[1] + _rand48_mult[2] * xseed[0]; | |||||
| xseed[0] = temp[0]; | |||||
| xseed[1] = temp[1]; | |||||
| xseed[2] = (unsigned short) accu; | |||||
| } | |||||