silent non-toplevel DEFSTRUCT
[sbcl.git] / src / code / random.lisp
index 2ff7336..373a3b2 100644 (file)
@@ -9,9 +9,21 @@
 
 (in-package "SB!KERNEL")
 
-;;; our implementation of the RANDOM-STATE type specified by ANSI CL
+;;; the size of the chunks returned by RANDOM-CHUNK
+(def!constant random-chunk-length 32)
+
+;;; the amount that we overlap chunks by when building a large integer
+;;; to make up for the loss of randomness in the low bits
+(def!constant random-integer-overlap 3)
+
+;;; extra bits of randomness that we generate before taking the value MOD the
+;;; limit, to avoid loss of randomness near the limit
+(def!constant random-integer-extra-bits 10)
+
+;;; the largest fixnum we can compute from one chunk of bits
+(def!constant random-fixnum-max
+  (1- (ash 1 (- random-chunk-length random-integer-extra-bits))))
+
 (sb!xc:defstruct (random-state (:constructor %make-random-state)
-                               ;; Shallow copy would be wrong: we must
-                               ;; effectively COPY-SEQ the STATE slot.
-                               (:copier nil))
+                               (:copier nil)) ; since shallow copy is wrong
   (state (init-random-state) :type (simple-array (unsigned-byte 32) (627))))