AUSAM/source/liba/rand.s

Compare this file to the similar file:
Show the results in this format:

/
/	random number generator for machines with FP11 flt. pt.
/
/	usage:
/		long srand(seed)/* set initial seed */
/		long seed;	/* return old seed */
/
/		int rand()	/* return a pseudo random number */
/				/* in the range 0 thru 32767 */
/
/		long rand()	/* return a pseudo random number */
/				/* in the range 0 thru 2147483647 */
/
/		double frand()	/* return a pseudo random number */
/				/* in the range 0.0 thru 1.0 */
/
/

	.globl	_srand,_frand,_lrand,_rand
.text

_srand:
	mov	seed+2,r1
	mov	seed,r0
	mov	2(sp),seed
	mov	4(sp),seed+2
	rts	pc

_frand:
	setl
	movif	seed,fr2
	mulf	randa,fr2
	addf	randc,fr2
	modf	randim,fr2	/ fr3 integral and fr2 fractional
	movf	fr2,fr0
	mulf	randm,fr2
	movfi	fr2,seed
	rts	pc

_lrand:
	jsr	pc,_frand	/ get random number in range 0.0 to 1.0
	mulf	maxlong,fr0
	movfi	fr0,-(sp)
	mov	(sp)+,r0
	mov	(sp)+,r1
	rts	pc

_rand:
	jsr	pc,_frand	/ get random number in range 0.0 to 1.0
	mulf	maxint,fr0
	seti
	movfi	fr0,-(sp)
	mov	(sp)+,r0
	rts	pc

/
/	Initialization of random number "constants"
/
.data

seed:
	166; 121043			/ long seed	7774755l
randa:
	44164; 106400; 0; 0		/ double randc	113218009.
randc:
	46727; 171073; 20000; 0		/ double randa	62605.
randm:
	47400; 0; 0; 0			/ double randm	536870912.
randim:
	31000; 0; 0; 0			/ double randim 1./randm
maxlong:
	47777; 177777; 177000; 0	/ largest long 2147483647.
maxint:
	43777; 177000; 0; 0		/ largest int 32767.