REFERENCE IMPLEMENTATIONS FOR SRFI-27 "Sources of Random Bits" ============================================================== Sebastian.Egner@philips.com, 10-Apr-2002. Files ----- readme - this file mrg32k3a.scm - generic parts of P. L' Ecuyer's MRG32k3a PRGN mrg32k3a-a.scm - core generator in Scheme integers mrg32k3a-b.c - core generator in C doubles for Scheme 48 mrg32k3a-c.scm - core generator in Gambit [Scheme] flonums srfi-27-a.scm - Scheme 48 package definition for Scheme-only impl. srfi-27-b.scm - Scheme 48 package definition for C/Scheme impl. srfi-27-c.scm - Gambit definition for Scheme-only impl. conftest.scm - confidence tests for the implementation Implementations --------------- The implementation has been factored into three parts. One part implements the core generator, one part provides the more generic functionality as specified in the SRFI, and one part combines the parts and provides the interface as specified in the SRFI. a) A Scheme-only implementation for Scheme 48 0.57: srfi-27-a.scm mrg32k3a-a.scm mrg32k3a.scm This implementation uses 54-bit Scheme integers for all arithmetics of the generator. The result are Scheme integers and inexact Scheme numbers when floating point values are requested. The implementation is slow but tries to stay away from unportable features as much as possible. b) An implementation in Scheme 48 0.57 and ANSI-C: srfi-27-b.scm mrg32k3a-b.scm mrg32k3a.scm This is a more realistic implementation using C's (double) datatype for the core generator and 54-bit Scheme integers for the more infrequent operations on the state like the random-source-pseudo-randomize! operation. This implementation is meant as an example for a realistic native code implementation of the SRFI. Performance is good. c) A Scheme-only implementation for Gambit 3.0: srfi-27-c.scm mrg32k3a-c.scm mrg32k3a.scm This implementation uses Gambit's 64-bit flonums. It is entirely written in Scheme but uses a few special features of the Gambit system to tell the compiler. This implementation is meant as an example for a realistic Scheme implementation using flonums in Scheme and no C-code. Performance is good when the code is used in compiled form; the implementation has been optimized by Brad Lucier. This has resulted in a subtantial performance gain.