Skip to content
Snippets Groups Projects
Commit d539b6a0 authored by Raymond Toy's avatar Raymond Toy
Browse files

Define xoroshiro-next before xoroshiro-chunk.

parent 95a01145
No related branches found
No related tags found
No related merge requests found
...@@ -120,32 +120,12 @@ ...@@ -120,32 +120,12 @@
;;;; Random entries: ;;;; Random entries:
;;; Size of the chunks returned by xoroshiro-chunk. #+x86
;;; (declaim (inline xoroshiro-next))
;;(defconstant random-chunk-length 32) #+x86
(defun xoroshiro-next (state)
;;; xoroshiro-chunk -- Internal (declare (type (simple-array double-float (2)) state))
;;; (vm::xoroshiro-next state))
;;; This function generaters a 32bit integer between 0 and #xffffffff
;;; inclusive.
;;;
(declaim (inline xoroshiro-chunk))
(defun xoroshiro-chunk (rng-state)
(declare (type xoro-random-state rng-state)
(optimize (speed 3) (safety 0)))
(let ((cached (xoro-random-state-cached-p rng-state)))
(cond (cached
(setf (xoro-random-state-cached-p rng-state) nil)
(xoro-random-state-rand rng-state))
(t
(let ((s (xoro-random-state-state rng-state)))
(declare (type (simple-array double-float (2)) s))
(multiple-value-bind (r1 r0)
(xoroshiro-next s)
(setf (xoro-random-state-rand rng-state) r0)
(setf (xoro-random-state-cached-p rng-state) t)
r1))))))
#-x86 #-x86
(defun xoroshiro-next (state) (defun xoroshiro-next (state)
...@@ -225,6 +205,34 @@ ...@@ -225,6 +205,34 @@
(rotl-36 s1-1 s1-0) (rotl-36 s1-1 s1-0)
(setf (aref state 0) (make-double s0-1 s0-0) (setf (aref state 0) (make-double s0-1 s0-0)
(aref state 1) (make-double r1 r0))))))) (aref state 1) (make-double r1 r0)))))))
;;; Size of the chunks returned by xoroshiro-chunk.
;;;
;;(defconstant random-chunk-length 32)
;;; xoroshiro-chunk -- Internal
;;;
;;; This function generaters a 32bit integer between 0 and #xffffffff
;;; inclusive.
;;;
(declaim (inline xoroshiro-chunk))
(defun xoroshiro-chunk (rng-state)
(declare (type xoro-random-state rng-state)
(optimize (speed 3) (safety 0)))
(let ((cached (xoro-random-state-cached-p rng-state)))
(cond (cached
(setf (xoro-random-state-cached-p rng-state) nil)
(xoro-random-state-rand rng-state))
(t
(let ((s (xoro-random-state-state rng-state)))
(declare (type (simple-array double-float (2)) s))
(multiple-value-bind (r1 r0)
(xoroshiro-next s)
(setf (xoro-random-state-rand rng-state) r0)
(setf (xoro-random-state-cached-p rng-state) t)
r1))))))
;;; %RANDOM-SINGLE-FLOAT, %RANDOM-DOUBLE-FLOAT -- Interface ;;; %RANDOM-SINGLE-FLOAT, %RANDOM-DOUBLE-FLOAT -- Interface
;;; ;;;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment