Welcome to GameHourz.com!
FAQFAQ      ProfileProfile    Private MessagesPrivate Messages   Log inLog in

Skybuck's Racing Random Number Generator V3 (algorithm fix..

 
Goto page 1, 2, 3
   Game Forums (Home) -> Core War RSS
Next:  Happy 2008  
Author Message
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 1) Posted: Mon Dec 31, 2007 9:54 am
Post subject: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates)
Archived from groups: alt>comp>lang>borland-delphi, others (more info?)

Hello,

The problem was with the "write" thread which wrote the numbers to the
screen, it would keep writing the same numbers because the other threads
didn't run yet. Now the write thread waits until the number generator
threads have at least run a little bit, which is done via the booleans.

So this small modification should now fix the algorithm and produce much
better random numbers, no more many duplicates !

Give it a try and do some analyzing ! Could be interesting ! Wink =D

program ProjectTest3;

{$APPTYPE CONSOLE}

// Skybuck's "pseudo (?) random number generator" based on concurrency/race
conditions.

// I shall call it: "Skybuck's Racing Random Number Generator"

// Now it's up to the "experts" to proof it's not random.

// Now it's up to the "experts" to predict the next generated random number.

// That would be impressive which means I don't believe it's possible Wink =D

// duplicate numbers are prevented by taking the result from thread 1 and
thread 2 when both have run.

// interestingly enough the numbers do seem to be random on different runs !
Wink =D

// v3

uses
SysUtils,
Classes;

var
Done1 : boolean;
Done2 : boolean;

vLehmerRandSeed : integer = 0;
vLehmerMultiplierA : integer = $08088405; // delphi's random parameter
vLehmerAdditiveConstantC : integer = $1; // delphi's random parameter

ParaLehmerModulesM : integer;
RandomNumber : integer;

type
Ttest1 = class(Tthread)
private

protected

procedure Execute; override;
public


end;

procedure Ttest1.Execute;
begin
while not terminated do
begin
{$RANGECHECKS OFF}
{$OVERFLOWCHECKS OFF}
vLehmerRandSeed := vLehmerRandSeed * vLehmerMultiplierA;
vLehmerRandSeed := vLehmerRandSeed + vLehmerAdditiveConstantC;
RandomNumber := ( int64( longword(ParaLehmerModulesM) ) * int64(
longword(vLehmerRandSeed) ) ) shr 32; // shift upper 32 bits to lower 32
bits.
{$OVERFLOWCHECKS ON}
{$RANGECHECKS ON}

Done1 := true;
end;
end;

type
Ttest2 = class(Tthread)
private

protected

procedure Execute; override;
public


end;

procedure Ttest2.Execute;
begin
while not terminated do
begin
{$RANGECHECKS OFF}
{$OVERFLOWCHECKS OFF}
vLehmerRandSeed := vLehmerRandSeed * vLehmerMultiplierA;
vLehmerRandSeed := vLehmerRandSeed + vLehmerAdditiveConstantC;
RandomNumber := ( int64( longword(ParaLehmerModulesM) ) * int64(
longword(vLehmerRandSeed) ) ) shr 32; // shift upper 32 bits to lower 32
bits.
{$OVERFLOWCHECKS ON}
{$RANGECHECKS ON}

Done2 := true;
end;
end;

type
Ttest3 = class(Tthread)
private

protected

procedure Execute; override;
public


end;

procedure Ttest3.Execute;
var
i : integer;
begin
i := 0;
while not terminated do
begin
if Done1 and Done2 then // wait until both threads are done for good mix.
begin
if i < 100 then
begin
writeln('Number ', i, ': ', RandomNumber );
i := i + 1;
end;

// now prevent writing the same numbers by setting booleans to false
// this forces the other threads to have been run a few times first Wink
// which prevents duplicates.
Done1 := false;
Done2 := false;
end;
end;
end;

var
Test1 : Ttest1;
Test2 : Ttest2;
Test3 : Ttest3;
begin
ParaLehmerModulesM := 2000000;

Test1 := Ttest1.Create( true );
Test2 := Ttest2.Create( true );
Test3 := Ttest3.Create( true );

writeln('press enter to start');
readln;

Test1.Resume;
Test2.Resume;
Test3.Resume;

writeln('press enter to stop');
readln;

Test1.Terminate;
Test2.Terminate;
Test3.Terminate;

Test1.WaitFor;
Test2.WaitFor;
Test3.WaitFor;

Test1.Free;
Test2.Free;
Test3.Free;

writeln('press enter to exit');
readln;
end.

{

First run:

Number 0: 591661
Number 1: 1383717
Number 2: 55425
Number 3: 1716193
Number 4: 1110588
Number 5: 178207
Number 6: 412599
Number 7: 885982
Number 8: 1298636
Number 9: 1345751
Number 10: 951115
Number 11: 567914
Number 12: 1438761
Number 13: 1975649
Number 14: 1179152
Number 15: 1188244
Number 16: 1316454
Number 17: 478399
Number 18: 588773
Number 19: 1449101
Number 20: 1782394
Number 21: 1450837
Number 22: 1412242
Number 23: 1958802
Number 24: 706453
Number 25: 1782788
Number 26: 1699169
Number 27: 1817297
Number 28: 1784603
Number 29: 460392
Number 30: 1071102
Number 31: 1265793
Number 32: 825621
Number 33: 1450705
Number 34: 1801089
Number 35: 1684760
Number 36: 1372617
Number 37: 944852
Number 38: 1073702
Number 39: 1425789
Number 40: 1714585
Number 41: 84531
Number 42: 883340
Number 43: 385843
Number 44: 1324871
Number 45: 1919535
Number 46: 169568
Number 47: 987892
Number 48: 1773056
Number 49: 1894215
Number 50: 168345
Number 51: 1558135
Number 52: 170659
Number 53: 1485408
Number 54: 650291
Number 55: 821355
Number 56: 504220
Number 57: 1459369
Number 58: 1382917
Number 59: 1248006
Number 60: 281447
Number 61: 1976216
Number 62: 597790
Number 63: 1206968
Number 64: 1012088
Number 65: 1007370
Number 66: 460146
Number 67: 369452
Number 68: 1472750
Number 69: 1741023
Number 70: 1124956
Number 71: 579444
Number 72: 925109
Number 73: 1954437
Number 74: 1791697
Number 75: 1221348
Number 76: 1400944
Number 77: 1090183
Number 78: 1909185
Number 79: 1754568
Number 80: 1975557
Number 81: 1966625
Number 82: 1407632
Number 83: 1000460
Number 84: 477043
Number 85: 1980560
Number 86: 847194
Number 87: 1625909
Number 88: 961493
Number 89: 534982
Number 90: 796648
Number 91: 601776
Number 92: 1758729
Number 93: 943836
Number 94: 1342188
Number 95: 593706
Number 96: 1566457
Number 97: 1689639
Number 98: 558203
Number 99: 1063754

Second run:

Number 0: 281194
Number 1: 1621131
Number 2: 588727
Number 3: 791944
Number 4: 977046
Number 5: 1894343
Number 6: 1198558
Number 7: 784820
Number 8: 230340
Number 9: 372705
Number 10: 211569
Number 11: 1413320
Number 12: 1036561
Number 13: 1281572
Number 14: 855929
Number 15: 67321
Number 16: 1730538
Number 17: 55501
Number 18: 596598
Number 19: 1852337
Number 20: 1595216
Number 21: 1177584
Number 22: 261003
Number 23: 1138416
Number 24: 1624625
Number 25: 892191
Number 26: 1835476
Number 27: 693223
Number 28: 1672337
Number 29: 1081086
Number 30: 171856
Number 31: 1859310
Number 32: 1826819
Number 33: 819557
Number 34: 1187465
Number 35: 1268580
Number 36: 1444621
Number 37: 926093
Number 38: 1435450
Number 39: 1875381
Number 40: 1964759
Number 41: 1492628
Number 42: 629905
Number 43: 1223551
Number 44: 1701942
Number 45: 1430186
Number 46: 1455564
Number 47: 833894
Number 48: 396754
Number 49: 584681
Number 50: 1479419
Number 51: 1791494
Number 52: 1075978
Number 53: 83511
Number 54: 333557
Number 55: 1186923
Number 56: 1189176
Number 57: 384811
Number 58: 842413
Number 59: 1575325
Number 60: 219042
Number 61: 1926040
Number 62: 1793956
Number 63: 568932
Number 64: 1257310
Number 65: 1942319
Number 66: 186415
Number 67: 1460770
Number 68: 837544
Number 69: 526578
Number 70: 631263
Number 71: 1647995
Number 72: 1552406
Number 73: 1789426
Number 74: 1563067
Number 75: 1428944
Number 76: 404380
Number 77: 781447
Number 78: 586741
Number 79: 822521
Number 80: 1904219
Number 81: 1816111
Number 82: 1528073
Number 83: 1222368
Number 84: 986158
Number 85: 1744271
Number 86: 1393829
Number 87: 1257212
Number 88: 137066
Number 89: 1117157
Number 90: 974501
Number 91: 1075550
Number 92: 1497516
Number 93: 1011126
Number 94: 1231837
Number 95: 397440
Number 96: 168001
Number 97: 1674372
Number 98: 419817
Number 99: 580721

Third run:

press enter to start

press enter to stop
Number 0: 1127368
Number 1: 1861336
Number 2: 200579
Number 3: 919461
Number 4: 1325393
Number 5: 235788
Number 6: 1385082
Number 7: 710515
Number 8: 372409
Number 9: 53656
Number 10: 1802735
Number 11: 1303214
Number 12: 444883
Number 13: 1842524
Number 14: 663743
Number 15: 796749
Number 16: 1020100
Number 17: 765427
Number 18: 1567388
Number 19: 762891
Number 20: 1875374
Number 21: 141281
Number 22: 1072721
Number 23: 861767
Number 24: 1505756
Number 25: 1492978
Number 26: 1136535
Number 27: 1344103
Number 28: 99564
Number 29: 1081327
Number 30: 1890092
Number 31: 201986
Number 32: 819531
Number 33: 663887
Number 34: 73381
Number 35: 890780
Number 36: 1815205
Number 37: 1739626
Number 38: 854664
Number 39: 1891111
Number 40: 776294
Number 41: 717348
Number 42: 736007
Number 43: 1297839
Number 44: 1075524
Number 45: 1048435
Number 46: 238541
Number 47: 906972
Number 48: 1822199
Number 49: 1595778
Number 50: 504827
Number 51: 336134
Number 52: 79638
Number 53: 451789
Number 54: 19788
Number 55: 1694109
Number 56: 1620422
Number 57: 842710
Number 58: 1784952
Number 59: 162821
Number 60: 685845
Number 61: 1364543
Number 62: 1258526
Number 63: 1350227
Number 64: 708092
Number 65: 766155
Number 66: 99934
Number 67: 577349
Number 68: 767099
Number 69: 839082
Number 70: 146038
Number 71: 1120110
Number 72: 1792050
Number 73: 1578237
Number 74: 519435
Number 75: 384586
Number 76: 1980275
Number 77: 412501
Number 78: 1839577
Number 79: 858070
Number 80: 1001597
Number 81: 524893
Number 82: 113754
Number 83: 1691114
Number 84: 765809
Number 85: 1285345
Number 86: 1242773
Number 87: 1661729
Number 88: 518079
Number 89: 267756
Number 90: 1115837
Number 91: 1632180
Number 92: 1533055
Number 93: 254998
Number 94: 1781603
Number 95: 381405
Number 96: 996179
Number 97: 1754414
Number 98: 1858042
Number 99: 1254092

}

Bye,
Skybuck.

 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Vend

External


Since: Dec 19, 2007
Posts: 7



(Msg. 2) Posted: Mon Dec 31, 2007 9:54 am
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, [Login to view extended thread Info.]
Archived from groups: alt>comp>lang>borland-delphi, others (more info?)

<snip>

On a quick look it seems that almost all numbers are 6 or 7 decimal
digits long. If you are trying to generate uniformly in the range
0..2^32 -1 it seems that you have a problem.

 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
William

External


Since: Dec 31, 2007
Posts: 10



(Msg. 3) Posted: Mon Dec 31, 2007 3:28 pm
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, [Login to view extended thread Info.]
Archived from groups: alt>comp>lang>borland-delphi, others (more info?)

What is the output range?

Skybuck Flying wrote:
> Hello,
>
> The problem was with the "write" thread which wrote the numbers to the
> screen, it would keep writing the same numbers because the other threads
> didn't run yet. Now the write thread waits until the number generator
> threads have at least run a little bit, which is done via the booleans.
>
> So this small modification should now fix the algorithm and produce much
> better random numbers, no more many duplicates !
>
> Give it a try and do some analyzing ! Could be interesting ! Wink =D
>
> program ProjectTest3;
>
> {$APPTYPE CONSOLE}
>
> // Skybuck's "pseudo (?) random number generator" based on concurrency/race
> conditions.
>
> // I shall call it: "Skybuck's Racing Random Number Generator"
>
> // Now it's up to the "experts" to proof it's not random.
>
> // Now it's up to the "experts" to predict the next generated random number.
>
> // That would be impressive which means I don't believe it's possible Wink =D
>
> // duplicate numbers are prevented by taking the result from thread 1 and
> thread 2 when both have run.
>
> // interestingly enough the numbers do seem to be random on different runs !
> Wink =D
>
> // v3
>
> uses
> SysUtils,
> Classes;
>
> var
> Done1 : boolean;
> Done2 : boolean;
>
> vLehmerRandSeed : integer = 0;
> vLehmerMultiplierA : integer = $08088405; // delphi's random parameter
> vLehmerAdditiveConstantC : integer = $1; // delphi's random parameter
>
> ParaLehmerModulesM : integer;
> RandomNumber : integer;
>
> type
> Ttest1 = class(Tthread)
> private
>
> protected
>
> procedure Execute; override;
> public
>
>
> end;
>
> procedure Ttest1.Execute;
> begin
> while not terminated do
> begin
> {$RANGECHECKS OFF}
> {$OVERFLOWCHECKS OFF}
> vLehmerRandSeed := vLehmerRandSeed * vLehmerMultiplierA;
> vLehmerRandSeed := vLehmerRandSeed + vLehmerAdditiveConstantC;
> RandomNumber := ( int64( longword(ParaLehmerModulesM) ) * int64(
> longword(vLehmerRandSeed) ) ) shr 32; // shift upper 32 bits to lower 32
> bits.
> {$OVERFLOWCHECKS ON}
> {$RANGECHECKS ON}
>
> Done1 := true;
> end;
> end;
>
> type
> Ttest2 = class(Tthread)
> private
>
> protected
>
> procedure Execute; override;
> public
>
>
> end;
>
> procedure Ttest2.Execute;
> begin
> while not terminated do
> begin
> {$RANGECHECKS OFF}
> {$OVERFLOWCHECKS OFF}
> vLehmerRandSeed := vLehmerRandSeed * vLehmerMultiplierA;
> vLehmerRandSeed := vLehmerRandSeed + vLehmerAdditiveConstantC;
> RandomNumber := ( int64( longword(ParaLehmerModulesM) ) * int64(
> longword(vLehmerRandSeed) ) ) shr 32; // shift upper 32 bits to lower 32
> bits.
> {$OVERFLOWCHECKS ON}
> {$RANGECHECKS ON}
>
> Done2 := true;
> end;
> end;
>
> type
> Ttest3 = class(Tthread)
> private
>
> protected
>
> procedure Execute; override;
> public
>
>
> end;
>
> procedure Ttest3.Execute;
> var
> i : integer;
> begin
> i := 0;
> while not terminated do
> begin
> if Done1 and Done2 then // wait until both threads are done for good mix.
> begin
> if i < 100 then
> begin
> writeln('Number ', i, ': ', RandomNumber );
> i := i + 1;
> end;
>
> // now prevent writing the same numbers by setting booleans to false
> // this forces the other threads to have been run a few times first Wink
> // which prevents duplicates.
> Done1 := false;
> Done2 := false;
> end;
> end;
> end;
>
> var
> Test1 : Ttest1;
> Test2 : Ttest2;
> Test3 : Ttest3;
> begin
> ParaLehmerModulesM := 2000000;
>
> Test1 := Ttest1.Create( true );
> Test2 := Ttest2.Create( true );
> Test3 := Ttest3.Create( true );
>
> writeln('press enter to start');
> readln;
>
> Test1.Resume;
> Test2.Resume;
> Test3.Resume;
>
> writeln('press enter to stop');
> readln;
>
> Test1.Terminate;
> Test2.Terminate;
> Test3.Terminate;
>
> Test1.WaitFor;
> Test2.WaitFor;
> Test3.WaitFor;
>
> Test1.Free;
> Test2.Free;
> Test3.Free;
>
> writeln('press enter to exit');
> readln;
> end.
>
> {
>
> First run:
>
> Number 0: 591661
> Number 1: 1383717
> Number 2: 55425
> Number 3: 1716193
> Number 4: 1110588
> Number 5: 178207
> Number 6: 412599
> Number 7: 885982
> Number 8: 1298636
> Number 9: 1345751
> Number 10: 951115
> Number 11: 567914
> Number 12: 1438761
> Number 13: 1975649
> Number 14: 1179152
> Number 15: 1188244
> Number 16: 1316454
> Number 17: 478399
> Number 18: 588773
> Number 19: 1449101
> Number 20: 1782394
> Number 21: 1450837
> Number 22: 1412242
> Number 23: 1958802
> Number 24: 706453
> Number 25: 1782788
> Number 26: 1699169
> Number 27: 1817297
> Number 28: 1784603
> Number 29: 460392
> Number 30: 1071102
> Number 31: 1265793
> Number 32: 825621
> Number 33: 1450705
> Number 34: 1801089
> Number 35: 1684760
> Number 36: 1372617
> Number 37: 944852
> Number 38: 1073702
> Number 39: 1425789
> Number 40: 1714585
> Number 41: 84531
> Number 42: 883340
> Number 43: 385843
> Number 44: 1324871
> Number 45: 1919535
> Number 46: 169568
> Number 47: 987892
> Number 48: 1773056
> Number 49: 1894215
> Number 50: 168345
> Number 51: 1558135
> Number 52: 170659
> Number 53: 1485408
> Number 54: 650291
> Number 55: 821355
> Number 56: 504220
> Number 57: 1459369
> Number 58: 1382917
> Number 59: 1248006
> Number 60: 281447
> Number 61: 1976216
> Number 62: 597790
> Number 63: 1206968
> Number 64: 1012088
> Number 65: 1007370
> Number 66: 460146
> Number 67: 369452
> Number 68: 1472750
> Number 69: 1741023
> Number 70: 1124956
> Number 71: 579444
> Number 72: 925109
> Number 73: 1954437
> Number 74: 1791697
> Number 75: 1221348
> Number 76: 1400944
> Number 77: 1090183
> Number 78: 1909185
> Number 79: 1754568
> Number 80: 1975557
> Number 81: 1966625
> Number 82: 1407632
> Number 83: 1000460
> Number 84: 477043
> Number 85: 1980560
> Number 86: 847194
> Number 87: 1625909
> Number 88: 961493
> Number 89: 534982
> Number 90: 796648
> Number 91: 601776
> Number 92: 1758729
> Number 93: 943836
> Number 94: 1342188
> Number 95: 593706
> Number 96: 1566457
> Number 97: 1689639
> Number 98: 558203
> Number 99: 1063754
>
> Second run:
>
> Number 0: 281194
> Number 1: 1621131
> Number 2: 588727
> Number 3: 791944
> Number 4: 977046
> Number 5: 1894343
> Number 6: 1198558
> Number 7: 784820
> Number 8: 230340
> Number 9: 372705
> Number 10: 211569
> Number 11: 1413320
> Number 12: 1036561
> Number 13: 1281572
> Number 14: 855929
> Number 15: 67321
> Number 16: 1730538
> Number 17: 55501
> Number 18: 596598
> Number 19: 1852337
> Number 20: 1595216
> Number 21: 1177584
> Number 22: 261003
> Number 23: 1138416
> Number 24: 1624625
> Number 25: 892191
> Number 26: 1835476
> Number 27: 693223
> Number 28: 1672337
> Number 29: 1081086
> Number 30: 171856
> Number 31: 1859310
> Number 32: 1826819
> Number 33: 819557
> Number 34: 1187465
> Number 35: 1268580
> Number 36: 1444621
> Number 37: 926093
> Number 38: 1435450
> Number 39: 1875381
> Number 40: 1964759
> Number 41: 1492628
> Number 42: 629905
> Number 43: 1223551
> Number 44: 1701942
> Number 45: 1430186
> Number 46: 1455564
> Number 47: 833894
> Number 48: 396754
> Number 49: 584681
> Number 50: 1479419
> Number 51: 1791494
> Number 52: 1075978
> Number 53: 83511
> Number 54: 333557
> Number 55: 1186923
> Number 56: 1189176
> Number 57: 384811
> Number 58: 842413
> Number 59: 1575325
> Number 60: 219042
> Number 61: 1926040
> Number 62: 1793956
> Number 63: 568932
> Number 64: 1257310
> Number 65: 1942319
> Number 66: 186415
> Number 67: 1460770
> Number 68: 837544
> Number 69: 526578
> Number 70: 631263
> Number 71: 1647995
> Number 72: 1552406
> Number 73: 1789426
> Number 74: 1563067
> Number 75: 1428944
> Number 76: 404380
> Number 77: 781447
> Number 78: 586741
> Number 79: 822521
> Number 80: 1904219
> Number 81: 1816111
> Number 82: 1528073
> Number 83: 1222368
> Number 84: 986158
> Number 85: 1744271
> Number 86: 1393829
> Number 87: 1257212
> Number 88: 137066
> Number 89: 1117157
> Number 90: 974501
> Number 91: 1075550
> Number 92: 1497516
> Number 93: 1011126
> Number 94: 1231837
> Number 95: 397440
> Number 96: 168001
> Number 97: 1674372
> Number 98: 419817
> Number 99: 580721
>
> Third run:
>
> press enter to start
>
> press enter to stop
> Number 0: 1127368
> Number 1: 1861336
> Number 2: 200579
> Number 3: 919461
> Number 4: 1325393
> Number 5: 235788
> Number 6: 1385082
> Number 7: 710515
> Number 8: 372409
> Number 9: 53656
> Number 10: 1802735
> Number 11: 1303214
> Number 12: 444883
> Number 13: 1842524
> Number 14: 663743
> Number 15: 796749
> Number 16: 1020100
> Number 17: 765427
> Number 18: 1567388
> Number 19: 762891
> Number 20: 1875374
> Number 21: 141281
> Number 22: 1072721
> Number 23: 861767
> Number 24: 1505756
> Number 25: 1492978
> Number 26: 1136535
> Number 27: 1344103
> Number 28: 99564
> Number 29: 1081327
> Number 30: 1890092
> Number 31: 201986
> Number 32: 819531
> Number 33: 663887
> Number 34: 73381
> Number 35: 890780
> Number 36: 1815205
> Number 37: 1739626
> Number 38: 854664
> Number 39: 1891111
> Number 40: 776294
> Number 41: 717348
> Number 42: 736007
> Number 43: 1297839
> Number 44: 1075524
> Number 45: 1048435
> Number 46: 238541
> Number 47: 906972
> Number 48: 1822199
> Number 49: 1595778
> Number 50: 504827
> Number 51: 336134
> Number 52: 79638
> Number 53: 451789
> Number 54: 19788
> Number 55: 1694109
> Number 56: 1620422
> Number 57: 842710
> Number 58: 1784952
> Number 59: 162821
> Number 60: 685845
> Number 61: 1364543
> Number 62: 1258526
> Number 63: 1350227
> Number 64: 708092
> Number 65: 766155
> Number 66: 99934
> Number 67: 577349
> Number 68: 767099
> Number 69: 839082
> Number 70: 146038
> Number 71: 1120110
> Number 72: 1792050
> Number 73: 1578237
> Number 74: 519435
> Number 75: 384586
> Number 76: 1980275
> Number 77: 412501
> Number 78: 1839577
> Number 79: 858070
> Number 80: 1001597
> Number 81: 524893
> Number 82: 113754
> Number 83: 1691114
> Number 84: 765809
> Number 85: 1285345
> Number 86: 1242773
> Number 87: 1661729
> Number 88: 518079
> Number 89: 267756
> Number 90: 1115837
> Number 91: 1632180
> Number 92: 1533055
> Number 93: 254998
> Number 94: 1781603
> Number 95: 381405
> Number 96: 996179
> Number 97: 1754414
> Number 98: 1858042
> Number 99: 1254092
>
> }
>
> Bye,
> Skybuck.
>
>
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 4) Posted: Mon Dec 31, 2007 3:29 pm
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

I wondered about that in the past as well.

But isn't that logical ?

There are much more big numbers than the smaller numbers.

So your observation means nothing ?!

Bye,
Skybuck.

"Vend" <vend82 RemoveThis @virgilio.it> wrote in message
news:ab554a13-84ba-4682-aad8-d6b07b4ce069@e6g2000prf.googlegroups.com...
> <snip>
>
> On a quick look it seems that almost all numbers are 6 or 7 decimal
> digits long. If you are trying to generate uniformly in the range
> 0..2^32 -1 it seems that you have a problem.
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
William

External


Since: Dec 31, 2007
Posts: 10



(Msg. 5) Posted: Mon Dec 31, 2007 4:00 pm
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

Bollocks. What about the numbers that are 8, 9 or 10 digits long. Aren't
there even more of them? Assuming you are generating a 32 bit unsigned
int. The max should be 4294967296. I don't think you even know the range
of this algorithm.

It's a mildly interesting idea but very poorly executed. Here's an idea,
instead of working with such poorly defined output, modify your program
to take a max and min parameter.

This would allow you to generate numbers in the range of say 1..10 and
test it properly without needing BILLIONS of runs.

Then gradually increase the range and run some of the more complex tests
mentioned in previous posts.

Skybuck Flying wrote:
> I wondered about that in the past as well.
>
> But isn't that logical ?
>
> There are much more big numbers than the smaller numbers.
>
> So your observation means nothing ?!
>
> Bye,
> Skybuck.
>
> "Vend" <vend82 RemoveThis @virgilio.it> wrote in message
> news:ab554a13-84ba-4682-aad8-d6b07b4ce069@e6g2000prf.googlegroups.com...
>> <snip>
>>
>> On a quick look it seems that almost all numbers are 6 or 7 decimal
>> digits long. If you are trying to generate uniformly in the range
>> 0..2^32 -1 it seems that you have a problem.
>
>
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 6) Posted: Mon Dec 31, 2007 4:54 pm
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

The output range is set via

ParaLehmerModulesM := 2000000;

So the output range should be

0 to 2000000

or maybe

0 to 1999999

One of those two.

If not then maybe algorithm bugged or something Wink

Bye,
Skybuck.

"William" <william_156.DeleteThis@gmail.com> wrote in message
news:Aradne4MFdw-l-Ta4p2dnAA@giganews.com...
> What is the output range?
>
> Skybuck Flying wrote:
>> Hello,
>>
>> The problem was with the "write" thread which wrote the numbers to the
>> screen, it would keep writing the same numbers because the other threads
>> didn't run yet. Now the write thread waits until the number generator
>> threads have at least run a little bit, which is done via the booleans.
>>
>> So this small modification should now fix the algorithm and produce much
>> better random numbers, no more many duplicates !
>>
>> Give it a try and do some analyzing ! Could be interesting ! Wink =D
>>
>> program ProjectTest3;
>>
>> {$APPTYPE CONSOLE}
>>
>> // Skybuck's "pseudo (?) random number generator" based on
>> concurrency/race conditions.
>>
>> // I shall call it: "Skybuck's Racing Random Number Generator"
>>
>> // Now it's up to the "experts" to proof it's not random.
>>
>> // Now it's up to the "experts" to predict the next generated random
>> number.
>>
>> // That would be impressive which means I don't believe it's possible Wink
>> =D
>>
>> // duplicate numbers are prevented by taking the result from thread 1 and
>> thread 2 when both have run.
>>
>> // interestingly enough the numbers do seem to be random on different
>> runs ! Wink =D
>>
>> // v3
>>
>> uses
>> SysUtils,
>> Classes;
>>
>> var
>> Done1 : boolean;
>> Done2 : boolean;
>>
>> vLehmerRandSeed : integer = 0;
>> vLehmerMultiplierA : integer = $08088405; // delphi's random parameter
>> vLehmerAdditiveConstantC : integer = $1; // delphi's random parameter
>>
>> ParaLehmerModulesM : integer;
>> RandomNumber : integer;
>>
>> type
>> Ttest1 = class(Tthread)
>> private
>>
>> protected
>>
>> procedure Execute; override;
>> public
>>
>>
>> end;
>>
>> procedure Ttest1.Execute;
>> begin
>> while not terminated do
>> begin
>> {$RANGECHECKS OFF}
>> {$OVERFLOWCHECKS OFF}
>> vLehmerRandSeed := vLehmerRandSeed * vLehmerMultiplierA;
>> vLehmerRandSeed := vLehmerRandSeed + vLehmerAdditiveConstantC;
>> RandomNumber := ( int64( longword(ParaLehmerModulesM) ) * int64(
>> longword(vLehmerRandSeed) ) ) shr 32; // shift upper 32 bits to lower 32
>> bits.
>> {$OVERFLOWCHECKS ON}
>> {$RANGECHECKS ON}
>>
>> Done1 := true;
>> end;
>> end;
>>
>> type
>> Ttest2 = class(Tthread)
>> private
>>
>> protected
>>
>> procedure Execute; override;
>> public
>>
>>
>> end;
>>
>> procedure Ttest2.Execute;
>> begin
>> while not terminated do
>> begin
>> {$RANGECHECKS OFF}
>> {$OVERFLOWCHECKS OFF}
>> vLehmerRandSeed := vLehmerRandSeed * vLehmerMultiplierA;
>> vLehmerRandSeed := vLehmerRandSeed + vLehmerAdditiveConstantC;
>> RandomNumber := ( int64( longword(ParaLehmerModulesM) ) * int64(
>> longword(vLehmerRandSeed) ) ) shr 32; // shift upper 32 bits to lower 32
>> bits.
>> {$OVERFLOWCHECKS ON}
>> {$RANGECHECKS ON}
>>
>> Done2 := true;
>> end;
>> end;
>>
>> type
>> Ttest3 = class(Tthread)
>> private
>>
>> protected
>>
>> procedure Execute; override;
>> public
>>
>>
>> end;
>>
>> procedure Ttest3.Execute;
>> var
>> i : integer;
>> begin
>> i := 0;
>> while not terminated do
>> begin
>> if Done1 and Done2 then // wait until both threads are done for good
>> mix.
>> begin
>> if i < 100 then
>> begin
>> writeln('Number ', i, ': ', RandomNumber );
>> i := i + 1;
>> end;
>>
>> // now prevent writing the same numbers by setting booleans to false
>> // this forces the other threads to have been run a few times first Wink
>> // which prevents duplicates.
>> Done1 := false;
>> Done2 := false;
>> end;
>> end;
>> end;
>>
>> var
>> Test1 : Ttest1;
>> Test2 : Ttest2;
>> Test3 : Ttest3;
>> begin
>> ParaLehmerModulesM := 2000000;
>>
>> Test1 := Ttest1.Create( true );
>> Test2 := Ttest2.Create( true );
>> Test3 := Ttest3.Create( true );
>>
>> writeln('press enter to start');
>> readln;
>>
>> Test1.Resume;
>> Test2.Resume;
>> Test3.Resume;
>>
>> writeln('press enter to stop');
>> readln;
>>
>> Test1.Terminate;
>> Test2.Terminate;
>> Test3.Terminate;
>>
>> Test1.WaitFor;
>> Test2.WaitFor;
>> Test3.WaitFor;
>>
>> Test1.Free;
>> Test2.Free;
>> Test3.Free;
>>
>> writeln('press enter to exit');
>> readln;
>> end.
>>
>> {
>>
>> First run:
>>
>> Number 0: 591661
>> Number 1: 1383717
>> Number 2: 55425
>> Number 3: 1716193
>> Number 4: 1110588
>> Number 5: 178207
>> Number 6: 412599
>> Number 7: 885982
>> Number 8: 1298636
>> Number 9: 1345751
>> Number 10: 951115
>> Number 11: 567914
>> Number 12: 1438761
>> Number 13: 1975649
>> Number 14: 1179152
>> Number 15: 1188244
>> Number 16: 1316454
>> Number 17: 478399
>> Number 18: 588773
>> Number 19: 1449101
>> Number 20: 1782394
>> Number 21: 1450837
>> Number 22: 1412242
>> Number 23: 1958802
>> Number 24: 706453
>> Number 25: 1782788
>> Number 26: 1699169
>> Number 27: 1817297
>> Number 28: 1784603
>> Number 29: 460392
>> Number 30: 1071102
>> Number 31: 1265793
>> Number 32: 825621
>> Number 33: 1450705
>> Number 34: 1801089
>> Number 35: 1684760
>> Number 36: 1372617
>> Number 37: 944852
>> Number 38: 1073702
>> Number 39: 1425789
>> Number 40: 1714585
>> Number 41: 84531
>> Number 42: 883340
>> Number 43: 385843
>> Number 44: 1324871
>> Number 45: 1919535
>> Number 46: 169568
>> Number 47: 987892
>> Number 48: 1773056
>> Number 49: 1894215
>> Number 50: 168345
>> Number 51: 1558135
>> Number 52: 170659
>> Number 53: 1485408
>> Number 54: 650291
>> Number 55: 821355
>> Number 56: 504220
>> Number 57: 1459369
>> Number 58: 1382917
>> Number 59: 1248006
>> Number 60: 281447
>> Number 61: 1976216
>> Number 62: 597790
>> Number 63: 1206968
>> Number 64: 1012088
>> Number 65: 1007370
>> Number 66: 460146
>> Number 67: 369452
>> Number 68: 1472750
>> Number 69: 1741023
>> Number 70: 1124956
>> Number 71: 579444
>> Number 72: 925109
>> Number 73: 1954437
>> Number 74: 1791697
>> Number 75: 1221348
>> Number 76: 1400944
>> Number 77: 1090183
>> Number 78: 1909185
>> Number 79: 1754568
>> Number 80: 1975557
>> Number 81: 1966625
>> Number 82: 1407632
>> Number 83: 1000460
>> Number 84: 477043
>> Number 85: 1980560
>> Number 86: 847194
>> Number 87: 1625909
>> Number 88: 961493
>> Number 89: 534982
>> Number 90: 796648
>> Number 91: 601776
>> Number 92: 1758729
>> Number 93: 943836
>> Number 94: 1342188
>> Number 95: 593706
>> Number 96: 1566457
>> Number 97: 1689639
>> Number 98: 558203
>> Number 99: 1063754
>>
>> Second run:
>>
>> Number 0: 281194
>> Number 1: 1621131
>> Number 2: 588727
>> Number 3: 791944
>> Number 4: 977046
>> Number 5: 1894343
>> Number 6: 1198558
>> Number 7: 784820
>> Number 8: 230340
>> Number 9: 372705
>> Number 10: 211569
>> Number 11: 1413320
>> Number 12: 1036561
>> Number 13: 1281572
>> Number 14: 855929
>> Number 15: 67321
>> Number 16: 1730538
>> Number 17: 55501
>> Number 18: 596598
>> Number 19: 1852337
>> Number 20: 1595216
>> Number 21: 1177584
>> Number 22: 261003
>> Number 23: 1138416
>> Number 24: 1624625
>> Number 25: 892191
>> Number 26: 1835476
>> Number 27: 693223
>> Number 28: 1672337
>> Number 29: 1081086
>> Number 30: 171856
>> Number 31: 1859310
>> Number 32: 1826819
>> Number 33: 819557
>> Number 34: 1187465
>> Number 35: 1268580
>> Number 36: 1444621
>> Number 37: 926093
>> Number 38: 1435450
>> Number 39: 1875381
>> Number 40: 1964759
>> Number 41: 1492628
>> Number 42: 629905
>> Number 43: 1223551
>> Number 44: 1701942
>> Number 45: 1430186
>> Number 46: 1455564
>> Number 47: 833894
>> Number 48: 396754
>> Number 49: 584681
>> Number 50: 1479419
>> Number 51: 1791494
>> Number 52: 1075978
>> Number 53: 83511
>> Number 54: 333557
>> Number 55: 1186923
>> Number 56: 1189176
>> Number 57: 384811
>> Number 58: 842413
>> Number 59: 1575325
>> Number 60: 219042
>> Number 61: 1926040
>> Number 62: 1793956
>> Number 63: 568932
>> Number 64: 1257310
>> Number 65: 1942319
>> Number 66: 186415
>> Number 67: 1460770
>> Number 68: 837544
>> Number 69: 526578
>> Number 70: 631263
>> Number 71: 1647995
>> Number 72: 1552406
>> Number 73: 1789426
>> Number 74: 1563067
>> Number 75: 1428944
>> Number 76: 404380
>> Number 77: 781447
>> Number 78: 586741
>> Number 79: 822521
>> Number 80: 1904219
>> Number 81: 1816111
>> Number 82: 1528073
>> Number 83: 1222368
>> Number 84: 986158
>> Number 85: 1744271
>> Number 86: 1393829
>> Number 87: 1257212
>> Number 88: 137066
>> Number 89: 1117157
>> Number 90: 974501
>> Number 91: 1075550
>> Number 92: 1497516
>> Number 93: 1011126
>> Number 94: 1231837
>> Number 95: 397440
>> Number 96: 168001
>> Number 97: 1674372
>> Number 98: 419817
>> Number 99: 580721
>>
>> Third run:
>>
>> press enter to start
>>
>> press enter to stop
>> Number 0: 1127368
>> Number 1: 1861336
>> Number 2: 200579
>> Number 3: 919461
>> Number 4: 1325393
>> Number 5: 235788
>> Number 6: 1385082
>> Number 7: 710515
>> Number 8: 372409
>> Number 9: 53656
>> Number 10: 1802735
>> Number 11: 1303214
>> Number 12: 444883
>> Number 13: 1842524
>> Number 14: 663743
>> Number 15: 796749
>> Number 16: 1020100
>> Number 17: 765427
>> Number 18: 1567388
>> Number 19: 762891
>> Number 20: 1875374
>> Number 21: 141281
>> Number 22: 1072721
>> Number 23: 861767
>> Number 24: 1505756
>> Number 25: 1492978
>> Number 26: 1136535
>> Number 27: 1344103
>> Number 28: 99564
>> Number 29: 1081327
>> Number 30: 1890092
>> Number 31: 201986
>> Number 32: 819531
>> Number 33: 663887
>> Number 34: 73381
>> Number 35: 890780
>> Number 36: 1815205
>> Number 37: 1739626
>> Number 38: 854664
>> Number 39: 1891111
>> Number 40: 776294
>> Number 41: 717348
>> Number 42: 736007
>> Number 43: 1297839
>> Number 44: 1075524
>> Number 45: 1048435
>> Number 46: 238541
>> Number 47: 906972
>> Number 48: 1822199
>> Number 49: 1595778
>> Number 50: 504827
>> Number 51: 336134
>> Number 52: 79638
>> Number 53: 451789
>> Number 54: 19788
>> Number 55: 1694109
>> Number 56: 1620422
>> Number 57: 842710
>> Number 58: 1784952
>> Number 59: 162821
>> Number 60: 685845
>> Number 61: 1364543
>> Number 62: 1258526
>> Number 63: 1350227
>> Number 64: 708092
>> Number 65: 766155
>> Number 66: 99934
>> Number 67: 577349
>> Number 68: 767099
>> Number 69: 839082
>> Number 70: 146038
>> Number 71: 1120110
>> Number 72: 1792050
>> Number 73: 1578237
>> Number 74: 519435
>> Number 75: 384586
>> Number 76: 1980275
>> Number 77: 412501
>> Number 78: 1839577
>> Number 79: 858070
>> Number 80: 1001597
>> Number 81: 524893
>> Number 82: 113754
>> Number 83: 1691114
>> Number 84: 765809
>> Number 85: 1285345
>> Number 86: 1242773
>> Number 87: 1661729
>> Number 88: 518079
>> Number 89: 267756
>> Number 90: 1115837
>> Number 91: 1632180
>> Number 92: 1533055
>> Number 93: 254998
>> Number 94: 1781603
>> Number 95: 381405
>> Number 96: 996179
>> Number 97: 1754414
>> Number 98: 1858042
>> Number 99: 1254092
>>
>> }
>>
>> Bye,
>> Skybuck.
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
William

External


Since: Dec 31, 2007
Posts: 10



(Msg. 7) Posted: Mon Dec 31, 2007 5:15 pm
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

F:\>ent test.bin
Entropy = 7.990464 bits per byte.

Optimum compression would reduce the size
of this 20000 byte file by 0 percent.

Chi square distribution for 20000 samples is 263.91, and randomly
would exceed this value 50.00 percent of the times.

Arithmetic mean value of data bytes is 127.8649 (127.5 = random).
Monte Carlo value for Pi is 3.123912391 (error 0.56 percent).
Serial correlation coefficient is 0.011951 (totally uncorrelated = 0.0).




Skybuck Flying wrote:
<snip>
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Vend

External


Since: Dec 19, 2007
Posts: 7



(Msg. 8) Posted: Mon Dec 31, 2007 5:21 pm
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, [Login to view extended thread Info.]
Archived from groups: alt>comp>lang>borland-delphi, others (more info?)

On 31 Dic 2007, 15:29, "Skybuck Flying" <s... DeleteThis @hotmail.com> wrote:
> I wondered about that in the past as well.
>
> But isn't that logical ?
>
> There are much more big numbers than the smaller numbers.
>
> So your observation means nothing ?!
>
> Bye,
> Skybuck.

I thought you were trying to get 32-bit integers, in which case the
expected number of base ten digits would have been 9.

But if you are generating in the range 0..1999999, it might be ok.
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 9) Posted: Tue Jan 01, 2008 7:23 am
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: alt>comp>lang>borland-delphi, others (more info?)

Like I wrote in the other sub thread:

The output range is set via

ParaLehmerModulesM := 2000000;

So the output range should be

0 to 2000000

or maybe

0 to 1999999

One of those two.

If not then maybe algorithm bugged or something Wink

Bye,
Skybuck.
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 10) Posted: Tue Jan 01, 2008 7:29 am
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

What's that all about Smile

Anyway here is a fun website to learn more about "entropy" Smile

http://math.ucsd.edu/~crypto/java/ENTROPY/

The shannon experiment with a nice applet with sound effects !

Entertaining ! Wink

Question:

Did you use range 0 to 2.000.000 to do the calculations ? or 32 bit ?

Bye,
Skybuck

"William" <william_156 DeleteThis @gmail.com> wrote in message
news:deCdnW4cVqMDvuTa4p2dnAA@giganews.com...
> F:\>ent test.bin
> Entropy = 7.990464 bits per byte.
>
> Optimum compression would reduce the size
> of this 20000 byte file by 0 percent.
>
> Chi square distribution for 20000 samples is 263.91, and randomly
> would exceed this value 50.00 percent of the times.
>
> Arithmetic mean value of data bytes is 127.8649 (127.5 = random).
> Monte Carlo value for Pi is 3.123912391 (error 0.56 percent).
> Serial correlation coefficient is 0.011951 (totally uncorrelated = 0.0).
>
>
>
>
> Skybuck Flying wrote:
> <snip>
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 11) Posted: Tue Jan 01, 2008 7:59 am
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

Ok,

According to wikipedia it seems zero/low entropy means very predictable for
example:

Entropy zero means very preditacble.

What does entropy 7.9 mean in this case ?

Hmmm since each byte has 8 bits.

And since a fair coin has entropy 1. (a coin is 1 bit)

Does this means it's almost unpredictable ?

What's the best value of entropy for 8 bits ?

Is it 8 or is it 255 ? or 256 ? Wink

Also what is the entropy of other random number generators ?

Bye,
Skybuck.
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 12) Posted: Tue Jan 01, 2008 8:18 am
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

Ok,

I think 8 bits of entropy probably highest for a byte.

This could mean Skybuck's Racing Random Number Generator could be quite good
! =D

Something Jim P. would not like to hear =D HAHAHAHA LOL.

Anyway.

Which version did you test ?

Version 3 or the faster version, version 4 ?

I think you probably tested version 3, that one probably the strongest ?

Could you do another test for version 4 ? Or vice versa ?

Thanks and

Bye,
Skybuck ! Wink

"William" <william_156.DeleteThis@gmail.com> wrote in message
news:deCdnW4cVqMDvuTa4p2dnAA@giganews.com...
> F:\>ent test.bin
> Entropy = 7.990464 bits per byte.
>
> Optimum compression would reduce the size
> of this 20000 byte file by 0 percent.
>
> Chi square distribution for 20000 samples is 263.91, and randomly
> would exceed this value 50.00 percent of the times.
>
> Arithmetic mean value of data bytes is 127.8649 (127.5 = random).
> Monte Carlo value for Pi is 3.123912391 (error 0.56 percent).
> Serial correlation coefficient is 0.011951 (totally uncorrelated = 0.0).
>
>
>
>
> Skybuck Flying wrote:
> <snip>
 >> Stay informed about: Skybuck's Racing Random Number Generator V3 (algorithm fix.. 
Back to top
Login to vote
Skybuck Flying

External


Since: May 25, 2006
Posts: 295



(Msg. 13) Posted: Tue Jan 01, 2008 8:24 am
Post subject: Re: Skybuck's Racing Random Number Generator V3 (algorithm fixed, should be no more many duplicates) [Login to view extended thread Info.]
Archived from groups: per prev. post (more info?)

The again, maybe it's just the lehmer algorithm which produces the high
entropy.

You should do a single threaded test of the lehmer algorithm.

And see what it's entropy is...

I bet it's entropy would be 8 as well, I would be surprised if it was not.

Don't know about the rest though Wink

So this all could mean absolutely nothing Wink

Bye,
Skybuck.

"William" <william_156.TakeThisOut@gmail.com> wrote in message
news:deCdnW4cVqMDvuTa4p2dnAA@giganews.com...
> F:\>ent test.bin
> Entropy = 7.990464 bits per byte.
>
> Optimum compression would reduce the size
> of this 20000 byte file by 0 percent.
>