Details

Java is a popular programming language, and its java.util.random package contains a special class for generating random numbers using a modified Linear Congruential Generator.

This LCG is unique in that it uses a custom function to set the seed indirectly, and doesn't return the entire Seed value.

Pseudocode

// This code is adapted from the Open JDK
// source code found here:
//
// https://github.com/openjdk/jdk/tree/master

// The current state value
state = 1138;

// Our constants
a = $5DEECE66D;
c = $B;

// Used to set the seed
function SetSeed( NewSeed ) {
	state = (NewSeed XOR $5DEECE66D) AND $FFFFFFFFFFFF;
}

// random number generator
function RandomNumber() {

	// Run the function
	state = ((a * state) + c) AND $FFFFFFFFFFFF;

	// Return the new value
	return state SHIFT_RIGHT 16;

}
			


Test Results

Period Length Test

SeedPeriod LengthResult
113864000Passed
6553564000Passed
867530964000Passed
1677721664000Passed
12345678964000Passed
Minimum to Pass: 64,000

Plot Test

 

Count the 1s Test

Seed% Bits that are 1sResult
113850.07%Passed
6553550.06%Passed
867530950.00%Passed
1677721649.94%Passed
12345678949.91%Passed
Minimum to Pass: 45%

Dartboard Test

SeedDarts PlacedResult
11387019Passed
655357013Passed
86753097037Passed
167772166968Passed
1234567896956Passed
Minimum to Pass: 2,600

Crush Test

SeedCompression RateResult
1138101.14%Passed
65535101.14%Passed
8675309101.14%Passed
16777216101.14%Passed
123456789101.14%Passed
Minimum to Pass: 95%

Unique Bytes Test

SeedUnique High BytesUnique Low BytesResult
1138163159Failed
65535153165Failed
8675309153165Failed
16777216167158Failed
123456789165158Failed
Minimum to Pass: 160

High/Low Byte Test

SeedHigh After HighHigh After LowLow After HighLow After LowSpreadResult
1138250624922492250931Passed
655352489247524742561123Passed
86753092441250525052548117Passed
167772162569249924992432139Passed
123456789253325082508245099Passed
Maximum to Pass: 500

Distribution Test

Seed113865535867530916777216123456789
0.0 to 0.110239959859921023
0.1 to 0.2102697996810181000
0.2 to 0.310091037996978977
0.3 to 0.4957958100110321026
0.4 to 0.598499699710481015
0.5 to 0.610169759859481022
0.6 to 0.7101310591050964961
0.7 to 0.810351006980968976
0.8 to 0.9941985106310111011
0.9 to 1.099710119761042990
Spread243225227301193
ResultPassedPassedPassedPassedPassed
Maximum to Pass: 500

Sample Output

3241790271414478857629885402552346678159805407297660896711691369822427768494529190321082459565093
369631262430220468863814758181182562834106642818897738189919785667073499207393387399422889687173
424566048017114138342532192172317031075841770810282679127783203751921168325255831574960922562037063
247233868225661462924068885700245509592632961506162489363494218794266937831220483100223421890387469
36430955643799700067272699188293998584612379171413500247702986093859155903022122303019291015386224
404562431410935461389137900174465940234035890536274853293379845275223458685026097426142137175093
24492779481918527106109135373249857932610602710621554755681384538987534160754043278846819474311624
3239930836197934309880428934716017020088397252993428949503254192308119186017028701238511070950705
4168569856305521564019575732053633173123354397445432330778516597156185409429939644559642862049813
16881170981221680674357554697911781241453381620452281797076637709862684191671432329135575578346376


Subvertisement
A WFTID Website