Hex Artifact Content
Not logged in

Artifact 2dc090ee925b1eb4af1f4b365a72c534f317d40b:


0000: 52 45 46 45 52 45 4e 43 45 20 49 4d 50 4c 45 4d  REFERENCE IMPLEM
0010: 45 4e 54 41 54 49 4f 4e 53 20 46 4f 52 20 53 52  ENTATIONS FOR SR
0020: 46 49 2d 32 37 20 22 53 6f 75 72 63 65 73 20 6f  FI-27 "Sources o
0030: 66 20 52 61 6e 64 6f 6d 20 42 69 74 73 22 0d 0a  f Random Bits"..
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a  ==============..
0080: 0d 0a 53 65 62 61 73 74 69 61 6e 2e 45 67 6e 65  ..Sebastian.Egne
0090: 72 40 70 68 69 6c 69 70 73 2e 63 6f 6d 2c 20 31  r@philips.com, 1
00a0: 30 2d 41 70 72 2d 32 30 30 32 2e 0d 0a 0d 0a 46  0-Apr-2002.....F
00b0: 69 6c 65 73 0d 0a 2d 2d 2d 2d 2d 0d 0a 0d 0a 20  iles..-----.... 
00c0: 20 72 65 61 64 6d 65 20 20 20 20 20 20 20 20 20   readme         
00d0: 2d 20 74 68 69 73 20 66 69 6c 65 0d 0a 20 20 6d  - this file..  m
00e0: 72 67 33 32 6b 33 61 2e 73 63 6d 20 20 20 2d 20  rg32k3a.scm   - 
00f0: 67 65 6e 65 72 69 63 20 70 61 72 74 73 20 6f 66  generic parts of
0100: 20 50 2e 20 4c 27 20 45 63 75 79 65 72 27 73 20   P. L' Ecuyer's 
0110: 4d 52 47 33 32 6b 33 61 20 50 52 47 4e 0d 0a 20  MRG32k3a PRGN.. 
0120: 20 6d 72 67 33 32 6b 33 61 2d 61 2e 73 63 6d 20   mrg32k3a-a.scm 
0130: 2d 20 63 6f 72 65 20 67 65 6e 65 72 61 74 6f 72  - core generator
0140: 20 69 6e 20 53 63 68 65 6d 65 20 69 6e 74 65 67   in Scheme integ
0150: 65 72 73 0d 0a 20 20 6d 72 67 33 32 6b 33 61 2d  ers..  mrg32k3a-
0160: 62 2e 63 20 20 20 2d 20 63 6f 72 65 20 67 65 6e  b.c   - core gen
0170: 65 72 61 74 6f 72 20 69 6e 20 43 20 64 6f 75 62  erator in C doub
0180: 6c 65 73 20 66 6f 72 20 53 63 68 65 6d 65 20 34  les for Scheme 4
0190: 38 0d 0a 20 20 6d 72 67 33 32 6b 33 61 2d 63 2e  8..  mrg32k3a-c.
01a0: 73 63 6d 20 2d 20 63 6f 72 65 20 67 65 6e 65 72  scm - core gener
01b0: 61 74 6f 72 20 69 6e 20 47 61 6d 62 69 74 20 5b  ator in Gambit [
01c0: 53 63 68 65 6d 65 5d 20 66 6c 6f 6e 75 6d 73 0d  Scheme] flonums.
01d0: 0a 20 20 73 72 66 69 2d 32 37 2d 61 2e 73 63 6d  .  srfi-27-a.scm
01e0: 20 20 2d 20 53 63 68 65 6d 65 20 34 38 20 70 61    - Scheme 48 pa
01f0: 63 6b 61 67 65 20 64 65 66 69 6e 69 74 69 6f 6e  ckage definition
0200: 20 66 6f 72 20 53 63 68 65 6d 65 2d 6f 6e 6c 79   for Scheme-only
0210: 20 69 6d 70 6c 2e 0d 0a 20 20 73 72 66 69 2d 32   impl...  srfi-2
0220: 37 2d 62 2e 73 63 6d 20 20 2d 20 53 63 68 65 6d  7-b.scm  - Schem
0230: 65 20 34 38 20 70 61 63 6b 61 67 65 20 64 65 66  e 48 package def
0240: 69 6e 69 74 69 6f 6e 20 66 6f 72 20 43 2f 53 63  inition for C/Sc
0250: 68 65 6d 65 20 69 6d 70 6c 2e 0d 0a 20 20 73 72  heme impl...  sr
0260: 66 69 2d 32 37 2d 63 2e 73 63 6d 20 20 2d 20 47  fi-27-c.scm  - G
0270: 61 6d 62 69 74 20 64 65 66 69 6e 69 74 69 6f 6e  ambit definition
0280: 20 66 6f 72 20 53 63 68 65 6d 65 2d 6f 6e 6c 79   for Scheme-only
0290: 20 69 6d 70 6c 2e 0d 0a 20 20 63 6f 6e 66 74 65   impl...  confte
02a0: 73 74 2e 73 63 6d 20 20 20 2d 20 63 6f 6e 66 69  st.scm   - confi
02b0: 64 65 6e 63 65 20 74 65 73 74 73 20 66 6f 72 20  dence tests for 
02c0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
02d0: 6f 6e 0d 0a 0d 0a 49 6d 70 6c 65 6d 65 6e 74 61  on....Implementa
02e0: 74 69 6f 6e 73 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  tions..---------
02f0: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 54 68 65 20 69 6d  ------....The im
0300: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 68 61 73  plementation has
0310: 20 62 65 65 6e 20 66 61 63 74 6f 72 65 64 20 69   been factored i
0320: 6e 74 6f 20 74 68 72 65 65 20 70 61 72 74 73 2e  nto three parts.
0330: 0d 0a 4f 6e 65 20 70 61 72 74 20 69 6d 70 6c 65  ..One part imple
0340: 6d 65 6e 74 73 20 74 68 65 20 63 6f 72 65 20 67  ments the core g
0350: 65 6e 65 72 61 74 6f 72 2c 20 6f 6e 65 20 70 61  enerator, one pa
0360: 72 74 20 70 72 6f 76 69 64 65 73 0d 0a 74 68 65  rt provides..the
0370: 20 6d 6f 72 65 20 67 65 6e 65 72 69 63 20 66 75   more generic fu
0380: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 61 73 20 73  nctionality as s
0390: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
03a0: 53 52 46 49 2c 0d 0a 61 6e 64 20 6f 6e 65 20 70  SRFI,..and one p
03b0: 61 72 74 20 63 6f 6d 62 69 6e 65 73 20 74 68 65  art combines the
03c0: 20 70 61 72 74 73 20 61 6e 64 20 70 72 6f 76 69   parts and provi
03d0: 64 65 73 20 74 68 65 20 69 6e 74 65 72 66 61 63  des the interfac
03e0: 65 0d 0a 61 73 20 73 70 65 63 69 66 69 65 64 20  e..as specified 
03f0: 69 6e 20 74 68 65 20 53 52 46 49 2e 0d 0a 0d 0a  in the SRFI.....
0400: 61 29 20 41 20 53 63 68 65 6d 65 2d 6f 6e 6c 79  a) A Scheme-only
0410: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0420: 66 6f 72 20 53 63 68 65 6d 65 20 34 38 20 30 2e  for Scheme 48 0.
0430: 35 37 3a 0d 0a 20 20 20 20 20 73 72 66 69 2d 32  57:..     srfi-2
0440: 37 2d 61 2e 73 63 6d 0d 0a 20 20 20 20 20 6d 72  7-a.scm..     mr
0450: 67 33 32 6b 33 61 2d 61 2e 73 63 6d 0d 0a 20 20  g32k3a-a.scm..  
0460: 20 20 20 6d 72 67 33 32 6b 33 61 2e 73 63 6d 0d     mrg32k3a.scm.
0470: 0a 0d 0a 20 20 20 54 68 69 73 20 69 6d 70 6c 65  ...   This imple
0480: 6d 65 6e 74 61 74 69 6f 6e 20 75 73 65 73 20 35  mentation uses 5
0490: 34 2d 62 69 74 20 53 63 68 65 6d 65 20 69 6e 74  4-bit Scheme int
04a0: 65 67 65 72 73 20 66 6f 72 20 61 6c 6c 0d 0a 20  egers for all.. 
04b0: 20 20 61 72 69 74 68 6d 65 74 69 63 73 20 6f 66    arithmetics of
04c0: 20 74 68 65 20 67 65 6e 65 72 61 74 6f 72 2e 20   the generator. 
04d0: 54 68 65 20 72 65 73 75 6c 74 20 61 72 65 20 53  The result are S
04e0: 63 68 65 6d 65 20 69 6e 74 65 67 65 72 73 0d 0a  cheme integers..
04f0: 20 20 20 61 6e 64 20 69 6e 65 78 61 63 74 20 53     and inexact S
0500: 63 68 65 6d 65 20 6e 75 6d 62 65 72 73 20 77 68  cheme numbers wh
0510: 65 6e 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  en floating poin
0520: 74 20 76 61 6c 75 65 73 20 61 72 65 0d 0a 20 20  t values are..  
0530: 20 72 65 71 75 65 73 74 65 64 2e 20 0d 0a 0d 0a   requested. ....
0540: 20 20 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74     The implement
0550: 61 74 69 6f 6e 20 69 73 20 73 6c 6f 77 20 62 75  ation is slow bu
0560: 74 20 74 72 69 65 73 20 74 6f 20 73 74 61 79 20  t tries to stay 
0570: 61 77 61 79 20 66 72 6f 6d 0d 0a 20 20 20 75 6e  away from..   un
0580: 70 6f 72 74 61 62 6c 65 20 66 65 61 74 75 72 65  portable feature
0590: 73 20 61 73 20 6d 75 63 68 20 61 73 20 70 6f 73  s as much as pos
05a0: 73 69 62 6c 65 2e 0d 0a 0d 0a 62 29 20 41 6e 20  sible.....b) An 
05b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
05c0: 6e 20 53 63 68 65 6d 65 20 34 38 20 30 2e 35 37  n Scheme 48 0.57
05d0: 20 61 6e 64 20 41 4e 53 49 2d 43 3a 0d 0a 20 20   and ANSI-C:..  
05e0: 20 20 20 73 72 66 69 2d 32 37 2d 62 2e 73 63 6d     srfi-27-b.scm
05f0: 0d 0a 20 20 20 20 20 6d 72 67 33 32 6b 33 61 2d  ..     mrg32k3a-
0600: 62 2e 73 63 6d 0d 0a 20 20 20 20 20 6d 72 67 33  b.scm..     mrg3
0610: 32 6b 33 61 2e 73 63 6d 0d 0a 0d 0a 20 20 20 54  2k3a.scm....   T
0620: 68 69 73 20 69 73 20 61 20 6d 6f 72 65 20 72 65  his is a more re
0630: 61 6c 69 73 74 69 63 20 69 6d 70 6c 65 6d 65 6e  alistic implemen
0640: 74 61 74 69 6f 6e 20 75 73 69 6e 67 20 43 27 73  tation using C's
0650: 20 28 64 6f 75 62 6c 65 29 0d 0a 20 20 20 64 61   (double)..   da
0660: 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 63  tatype for the c
0670: 6f 72 65 20 67 65 6e 65 72 61 74 6f 72 20 61 6e  ore generator an
0680: 64 20 35 34 2d 62 69 74 20 53 63 68 65 6d 65 20  d 54-bit Scheme 
0690: 69 6e 74 65 67 65 72 73 0d 0a 20 20 20 66 6f 72  integers..   for
06a0: 20 74 68 65 20 6d 6f 72 65 20 69 6e 66 72 65 71   the more infreq
06b0: 75 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 73 20  uent operations 
06c0: 6f 6e 20 74 68 65 20 73 74 61 74 65 20 6c 69 6b  on the state lik
06d0: 65 20 74 68 65 0d 0a 20 20 20 72 61 6e 64 6f 6d  e the..   random
06e0: 2d 73 6f 75 72 63 65 2d 70 73 65 75 64 6f 2d 72  -source-pseudo-r
06f0: 61 6e 64 6f 6d 69 7a 65 21 20 6f 70 65 72 61 74  andomize! operat
0700: 69 6f 6e 2e 0d 0a 0d 0a 20 20 20 54 68 69 73 20  ion.....   This 
0710: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
0720: 73 20 6d 65 61 6e 74 20 61 73 20 61 6e 20 65 78  s meant as an ex
0730: 61 6d 70 6c 65 20 66 6f 72 20 61 20 72 65 61 6c  ample for a real
0740: 69 73 74 69 63 0d 0a 20 20 20 6e 61 74 69 76 65  istic..   native
0750: 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 61   code implementa
0760: 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 52 46 49  tion of the SRFI
0770: 2e 20 50 65 72 66 6f 72 6d 61 6e 63 65 20 69 73  . Performance is
0780: 20 67 6f 6f 64 2e 0d 0a 0d 0a 63 29 20 41 20 53   good.....c) A S
0790: 63 68 65 6d 65 2d 6f 6e 6c 79 20 69 6d 70 6c 65  cheme-only imple
07a0: 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 47 61  mentation for Ga
07b0: 6d 62 69 74 20 33 2e 30 3a 0d 0a 20 20 20 20 20  mbit 3.0:..     
07c0: 73 72 66 69 2d 32 37 2d 63 2e 73 63 6d 0d 0a 20  srfi-27-c.scm.. 
07d0: 20 20 20 20 6d 72 67 33 32 6b 33 61 2d 63 2e 73      mrg32k3a-c.s
07e0: 63 6d 0d 0a 20 20 20 20 20 6d 72 67 33 32 6b 33  cm..     mrg32k3
07f0: 61 2e 73 63 6d 0d 0a 0d 0a 20 20 20 54 68 69 73  a.scm....   This
0800: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0810: 75 73 65 73 20 47 61 6d 62 69 74 27 73 20 36 34  uses Gambit's 64
0820: 2d 62 69 74 20 66 6c 6f 6e 75 6d 73 2e 20 49 74  -bit flonums. It
0830: 20 69 73 0d 0a 20 20 20 65 6e 74 69 72 65 6c 79   is..   entirely
0840: 20 77 72 69 74 74 65 6e 20 69 6e 20 53 63 68 65   written in Sche
0850: 6d 65 20 62 75 74 20 75 73 65 73 20 61 20 66 65  me but uses a fe
0860: 77 20 73 70 65 63 69 61 6c 20 66 65 61 74 75 72  w special featur
0870: 65 73 0d 0a 20 20 20 6f 66 20 74 68 65 20 47 61  es..   of the Ga
0880: 6d 62 69 74 20 73 79 73 74 65 6d 20 74 6f 20 74  mbit system to t
0890: 65 6c 6c 20 74 68 65 20 63 6f 6d 70 69 6c 65 72  ell the compiler
08a0: 2e 0d 0a 0d 0a 20 20 20 54 68 69 73 20 69 6d 70  .....   This imp
08b0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d  lementation is m
08c0: 65 61 6e 74 20 61 73 20 61 6e 20 65 78 61 6d 70  eant as an examp
08d0: 6c 65 20 66 6f 72 20 61 20 72 65 61 6c 69 73 74  le for a realist
08e0: 69 63 0d 0a 20 20 20 53 63 68 65 6d 65 20 69 6d  ic..   Scheme im
08f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73 69  plementation usi
0900: 6e 67 20 66 6c 6f 6e 75 6d 73 20 69 6e 20 53 63  ng flonums in Sc
0910: 68 65 6d 65 20 61 6e 64 20 6e 6f 20 43 2d 63 6f  heme and no C-co
0920: 64 65 2e 0d 0a 20 20 20 50 65 72 66 6f 72 6d 61  de...   Performa
0930: 6e 63 65 20 69 73 20 67 6f 6f 64 20 77 68 65 6e  nce is good when
0940: 20 74 68 65 20 63 6f 64 65 20 69 73 20 75 73 65   the code is use
0950: 64 20 69 6e 20 63 6f 6d 70 69 6c 65 64 20 66 6f  d in compiled fo
0960: 72 6d 3b 0d 0a 20 20 20 74 68 65 20 69 6d 70 6c  rm;..   the impl
0970: 65 6d 65 6e 74 61 74 69 6f 6e 20 68 61 73 20 62  ementation has b
0980: 65 65 6e 20 6f 70 74 69 6d 69 7a 65 64 20 62 79  een optimized by
0990: 20 42 72 61 64 20 4c 75 63 69 65 72 2e 20 54 68   Brad Lucier. Th
09a0: 69 73 0d 0a 20 20 20 68 61 73 20 72 65 73 75 6c  is..   has resul
09b0: 74 65 64 20 69 6e 20 61 20 73 75 62 74 61 6e 74  ted in a subtant
09c0: 69 61 6c 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ial performance 
09d0: 67 61 69 6e 2e 0d 0a                             gain...