Random.mesaProducesarandomsequenceofINTs.Lasteditedby:MBrownonAugust27,198210:59amRandom:CEDARDEFINITIONS=BEGINInit:PROC[range:INT_0,seed:INT_0]RETURNS[trueSeed:INT];TheparametersrangeandseeddeterminethesequencegeneratedbyprocedureNext(alsoChoose)below.Ifrange<=0,Nextwillproduceresultsin[0..LAST[INT]];otherwise,Nextwillproduceresultsin[0..range).Ifseed=0,adefaultseedvalueisusedtodeterminethestartingpointofthesequence;ifseed>0,seedisscaledifnecessaryandthenused;ifseed<0,aseedvalueisderivedfromthesystemclock.Inanycase,theseedvalueactuallyused(afterscaling)istheINTvaluereturnedbyInit.Avoidsmallvaluesoftherangeparameter;theintentofrangeisonlytoallowthesamesequencetobeproducedbydifferentmachines.Next:PROC[]RETURNS[INT];AcalltoNextreturnsthenextterminthesequencedeterminedbythemostrecentcalltoInit.Choose:PROC[min,max:INT]RETURNS[INT--[min..max]--];!Error[badInterval]([min..max]isanillegalinterval).Choosesapointintheinterval[min..max]atrandom.(Thechoiceisquiterandom,evenifthisintervalislarge.)Iftheintervalisempty(min>max),oriftheintervallength(max-min+1)exceedstherangeofnumbersthegeneratorwasinitializedtoproduce,raisesERRORError[badInterval].Error:ERROR[ec:ErrorType];ErrorType:TYPE={badInterval};END.RandomnumbergeneratorsBasicinformationAgeneratoriscreatedbymoduleinstantiation,thatis,itholdsthestateofitscurrentpseudo-randomsequenceinaglobalframe.Ageneratorisalsoamodulemonitor,sothattwounsynchronizedprocessesmayeachrequestthenexttermofthecurrentsequencewithnoilleffect.(Atestprogramthattakesadvantageofthisfeatureisnotlikelytogiverepeatableresults,however.)STARTingageneratorcausesittoinitializeitselfbycallingInit,withdefaultparameters.Soasimpleapplicationneedinga(repeatable)randomsequenceneednotcontainanexplicitInitcall.Threevariantsofthispackageareavailable,generatingnonnegativeINTs(Random),nonnegativeINTEGERs(RandomInt),andCARDINALs(RandomCard).TheonlyfunctionaldifferencebetweenthethreeinterfacesRandom,RandomCard,andRandomIntisthatRandomCardisonlycapableofgeneratingsequencesin[0..LAST[CARDINAL]];RandomCard.Inittakesnorangeparameter.BecauseInitisaprocedurehavingtwoparametersofthesametype,itisbestcalledbyusingMesa'skeywordparametersyntax;Chooseshouldalsobe.1���pî	ìïa¶
qî	ìï]xî´�îèîÖîvrîï]x�î–ï]xqî+ï]x�î¯ï]x�îýï[¼îîîïYÿîµî¨îHî…îËî#ŠsîýïV‡tî ïV‡�îkïV‡î
sî ïV‡�tî ëïV‡uîýïSsîïS�tîïS�î¾ïSsî£ïS�îïStîJïS�î´ïSsîÀïS�îMïSîÙtî mïS�î ×ïSsî"ãïS�î$oïStî&ïS�î&ÛïSsî+øïS�î,\ïStî2’ïS�î2ûïSsî4ïS�î5�ïS�qîýïP~îñ	î�îóîÇîçî&Iî(Åî.–î4ßî6êî=Fî@àîDWîýïN×îÆîdîQîÌîrî$î(Üî*’rî,aïN×�î-$ïN×qî/XïN×�rî/ÆïN×qî1ØïN×�î2FïN×î3Â	î:î=î@6îESîýïM0î

îxî�îR�îî úî#ãî'gî(Íî+×î-vî3¡î5èî:Ñî>Bî?àîB&îH9îýïKˆî¿îÈîNîkîÛî ëî#©î&Îî+î,î1C�î2’î5›î9@î:Æî?}îBÕîE;îýïIáînîLîäî+îwîfî ðî&	î)î,Æî1Èî34rî5€ïIá�î5üïIáqî7ûïIá�î8–ïIáî;…î@äîB¾îýïGQîØîgîoî
îSî	î%Ýî(#î+üî-šî1Vî2¼î5²î7Pî:Ýî=#î@‡îF îG¿îýïEªîºî”îòuîýïB1sîêïB1�tîèïB1�îïB1sîuïB1�îØïB1�tî¿ïB1�î“ïB1sî±ïB1�tîïB1sîïB1�î‚ïB1�qîýï?¡�î
îîºî$î»îîî"Fî#ìî&8î+×	î2¹î4“î6ßî:î>&î@¼îBauîýï<)sîWï<)�tîUï<)�îüï<)sîáï<)�îDï<)îttîòï<)�î[ï<)sîýï<)�tîåï<)�î¹ï<)sî$Öï<)�tî%9ï<)qî'Dï<)�î'¾ï<)sî/{ï<)�î/Þï<)�qîï:m�î-îâîë
î":î#¦î%™î)¥	îýï7Ýî4�î]îÉîcî¤î|	î%Fî&ßî,’î/Ãî3Ýî5=î8‘î=Ìî@ÔîBîD«îýï65î
Yîøîvî³î‡îãîÏî"ô�î$î'íî)—î*Ýî-î1îî5ý
î>´îCîEÌîýï4Žî
¡î
îVîYîù
î$2î%×î+;rî.ûï4Ž�î/½ï4Žqî3dï4Ž�î4Wï4Žsîýï1tî*ï1�îäï1sî¦ï1�î	ï1îG
îýï/Y	tî/ï/Y�îèï/Ysî†ï/Y�îkï/Y�î 
î ôtîýï+ásî…ï+á�pî	ìï&ÏîuîT	vî	ìï"Šîk
qî	ìï�î›îËîeî<îDî'
î'|î*|î,mî-òî1©î4"î7„î9Uî;_î@:î	ìïxî›îO�î“î®î�îî##î$žî'y�î(½î-î2úî4Áî7¢î:=
îCÈî	ìïÐî
îNîî…î¿îî×î"Iî'î,âî0î2î3ïî8¹î:Ùî=ƒîC
îFî	ìï)îGîêîƒî
îyîÜî ‘î"6î%	î+rî0rî	ìï™qî
¥ï™�îï™î�îxîŸîóîoî8	î$åî(Rî*Pî.Üî2
î5*î9Í
îAÐîD�îE_î	ìïò
îÕîÐ�îîfî#Tî(ôî,î.€î3Pî5Cî:î<¿î	ìïbî
¿îËî_îéîîa	î$O	î*à
rî2Fïb�î2Âïbqî4Wïb�î5Qïbî;ô
rîCZïb�îCÖïbqîH†ïb�î	ìï»îjrîï»�îÛï»qî3ï»�î>ï»î&\î)"î, 	î2	î8§î=Äî@îC€	î	ìïîË
îŒîNî"žî$)î'	î/ƒî1
î4(î9%î:ç	îA¦îGéî	ìïlrî»ïl�î}ïlqî²ïl�rî ïlqîCïl�î±ïlîî!ìî%wî'jî+-	î	ìïÜîSî1îÊ�î,î„î î"É	î)Õî+¦î.î1¶î5!î6¦î8?î;0î?>îAEîE
î	ìï
5îDîžîkî*î#pî&=wî)Èïö�ÿ�������‰��������TVm$¯����������������������SampleprogramThefollowingistheskeletonofaprogramthatusestheRandompackage.Theprogramfillsanarraycalled"rolls"withrandomnumbersthatmightrepresentdietrials:DIRECTORYRandomUSING[Init,Choose],...Sample:PROGRAMIMPORTSRandom,......rolls:ARRAY[0..100)OFINT[1..6];...[]_Random.Init[];--usedefaultseedandfullrangeFORi:INTIN[0..100)DORolls[i]_Random.Choose[min:1,max:6]ENDLOOP;...END.TechnicaldetailsThesegeneratorsarebasedonanAlgolWprogramdistributedbyDonaldKnuthtohisCS144bclassin1975.TheyusetheadditiverandomnumbergenerationalgorithmthatisrecommendedinthesecondeditionofSeminumericalAlgorithmsbyKnuth,andthatwasthesubjectofaPh.D.thesisbyJohnReiserofStanford("Theanalysisofadditiverandomnumbergenerators",STAN-CS-77-601,March1977.)Theadditivegeneratorhasseveraladvantagesoverastandardlinearcongruentialgenerator(lcg):Thesequencesthatitgeneratesaremore"random"inseveralways.Withanlcggeneratingasequencea(n),therelatedsequencea(n)mod2hasperiod2,a(n)mod4hasperiod4,andsoon;thuscaremustbetakennottoderiveanyresultsprimarilyfromtheleast-significantbitsofa(n).Anadditivegeneratorproducesnumberswhosebitsaremoreuniformlyrandom.Anlcgforashortwordlengthhasashortperiod(forexample,asequenceof16bitcardinalsmustcycleafter64kterms);anadditivegeneratormayhaveaverylongperiodevenforshortwordlengths.Manylcgs(includingIBM'snotoriousRANDU)generatesequencesthatareverypoorlydistributedintwoandthreedimensions(youmightseethisbyplottingconsecutivepairsortriplesoftermsineuclideanspaceandnotingthepatterns);additivegeneratorsdonothavethisproblem.Thegeneratorrelativelyeasytotransportfrommachinetomachine,andcanbemadetogeneratethesamesequencesoneachmachine.Thiscanbedifficultwithlcgsbecausethesequencestheygenerateusuallydependonthewayamachinehandlesoverflows(inparticular,onthewordlength.)Anadditivegeneratorcanproducearandomsequencewithoutevercausinganoverflow.Thegeneratorisrelativelyfastbecauseitdoesnotusemultiplication,whichisatime-consumingoperationonourpresentmachines.ChangeLogCreatedbyMBrownonJuly2,1979ChangedbyMBrownonMay2,198011:18PMRenamedmoduletoconformtoCedarstandards.AddeddefaultingofparameterstoInitRandom,andnameditsresulttrueSeed.ChangedbyMBrownonSeptember25,19809:26AM2���vî	ìïaíîÃqî	ìï^îËî»îCî«îîÎ�îî$Ÿî'î*î,õî2yî8Ðî;¯îA0îCíîEüî	ìï\èî
Íî1î-îî…î"Wî&1î+òî.%rî	ìïZaqî
õïX´rî\ïX´�î9ïX´qîïX´�îzïX´îƒî
õïWî	ìïUYrî;ïUY�îôïUYîvqî6ïUY�î4ïUYî öî
õïS¬î
õïQÿrîqïQÿ�î<ïQÿqîÒïQÿ�î@ïQÿrî°ïQÿ�îŒïQÿ�î¦î!îpîgqîMïQÿ�î
õïPQî
õïN¤îU�î
Â
îî{îÛîZî"Iî$ìî'brî
õïL÷�î¥ïL÷qî
¶ïL÷�îïL÷�rîïL÷�î“ïL÷î’qîTïL÷�îÂïL÷rî2ïL÷�îïL÷�qîýïKJî¹�î&î@î Ìî$WrîýïI�îÀïIqî­ïI�î
õïGïrî
ÀïFBqî
;ïFB�vî	ìïBîxqî	ìï>²î
è	îˆîöîÄîÐîÝî$�î)~
î04î2(î7î;Zî=î?[îD”îGéî	ìï=
îoî	î™îîHî!gî&|	î-Lî3 î6¢î8>
î@ÞîBµîE1î	ìï;cîfîîJ	î Cî""î&´î)]î,3î.Øî1)î5­î7U�î8î<€î@=îBîEkî	ìï9¼î“î+îî7îÞî äî%Öî*¿î2Rî=¿îB(îFÌî	ìï8îîîðîfî×	î"¶î%¤�î&Ùî,Vî0/î7ïî=ñî	ìï5ŽîÃîûîàîLîLî´î#2î)”î+Nî/Óî4î7¦î9­î;ó	îB§�îCïî	ìï3æî
8î’îî¿î³î»�î þî#î'¦î)Aî,5î/=�î0€î3î7(î8Ãî;tî=;î@GîCGîFCî	ìï2?îËî îîÈîÄîmî¹î$›î'èî*Dî3úî6–î8Iî<+î>{îCŒî	ìï0˜îpîÎîºî:î‚î ßî&øî,«î.ßî1î3!�î4Jî7¨	î>‡î@ð�îBîEwî	ìï.ðî“îM�îˆî.î×îÃîÑî$•î'çî+Jî.ƒî16î6gî8aî=iîCqîFhî	ìï-I�î,îî.îRîqî¤îî&}î*uî-8	î3 î7ïî=çîD&î	ìï+¢î@îAîÅîÙî+
î#÷î%Íî(‰î+\î.÷	î6	î9Iî=Tî?ÂîBŠîD”î	ìï)ú
îðî7îæîëî…î)î Åî&³î*Hî,âî1î3P	î9Ûî>Ó	îEPîG+î	ìï(Sî
î¬î	ìï%Ìî¦îŸ	î_îOîêî"¢î%×î+,î,Èî2uî5î7”î9[î<çî>ƒîCâîF%î	ìï$%î*î8îzîêîî!¼î#¦î(Äî+Úî.¬î3½î6#î<bî?nîDñî	ìï"~î|îuîÇîŽ�îÈî-î!î&øî)
î/§î1 î3òî<?î>…îCŒî	ìï Öîzî†�î»î©îIî""î$ûî)Þî+Ñî	ìïOî­î®î	îÞîtî!iî"¾î%Áî("î*€î3hî7Iî8³�î9å
îC˜î	ìï¨îßîUî÷pî	ìï¢îëxî	ìïpîîîÙîdî^îêî	ìïêî¾î¹îî…îµîBî"tî%Ëïê�î&sïê�qî	ìïcîîåîµî'î÷î"$	î)Xî-±	î4,î5û	î=î>Ô
îFëî	ìï¼î@îîÔxî	ìï
5î¾î¹îî…î kî"©î&stî)‚ï
5�î*Uï
5�wî)Èïö��������q��������TVm$þ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������AddedChoose.ChangedbyMBrownonMarch9,198210:47amAddedError,ErrorType(usedtoraiseunnamedERROR).ChangedbyMBrownonJune8,198211:04amChangedmodulenamefromRandomLongInt,procsNextfromRandom,InitfromInitRandom,mademoduleCEDARChangedbyMBrownonAugust27,198211:10amMergedindocumentation.3��qî	ìïb&îxî	ìï_«î¾î¹îî…îëîxî"¾î&}qî	ìï]0îî'î´î=îâî!rî&íï]0�î'°ï]0qî*íï]0�î+fï]0�xî	ìïZµî¾î¹îî…î×îdî!ªî%iqî	ìïX:îÈî±îˆîù
î&Èî*„î.!î1‘î7„î:hî=Ù
îEùî	ìïV“rî¢ïV“�îmïV“xî	ìïTî¾î¹îî…îCî €î#Æî'…qî	ìïQîàî…
wî)Èï����������������TVm$� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
TIMESROMAN�����������þŸ����	HELVETICA������������þŸ����
TIMESROMAN����������þY����
TIMESROMAN����������þŸ����
TIMESROMAN�����������þæ����LAUREL���������������þŸ����
TIMESROMAN����������þæ����
TIMESROMAN����������þŸ�����
TIMESROMAN����������þ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	����	�	�È�����Õ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j/������™–ªæ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRandom.press�����������������������������������������������������������������������27-Aug-82 15:29:58���������������������������������������������������������������������������������������������������������������������������������������������������������