// File: /workspace/github_cpp_makefile_star2_O1/auton1[P]motiflocation/random.cpp
// Function: bnlrnd(double, int)
int bnlrnd(double pp, int n)
{
	int j;
	static int nold=(-1);
	double am,em,g,angle,p,bnl,sq,t,y;
	static double pold=(-1.0),pc,plog,pclog,en,oldg;
	p=(pp <= 0.5 ? pp : 1.0-pp);
	am=n*p;		//This is the mean of the deviate to be produced.
	if (n < 25) { 
		bnl = 0.0;
		for (j=1;j<=n;j++)
			if (ran2() < p) ++bnl;
	} else if (am < 1.0) { 
		g=exp(-am);
		t=1.0;
		for (j=0;j<=n;j++) {
			t *= ran2();
			if (t < g) break;
		}
		bnl=(j <= n ? j : n);
	} else {
		if (n != nold) { 
			en=n; 
			oldg=gammln(en+1.0);
			nold=n;
		} if (p != pold) { 
			pc=1.0-p; 
			plog=log(p);
			pclog=log(pc);
			pold=p;
		}
		sq=sqrt(2.0*am*pc); 
		do {
			do {
				angle=PI*ran2();
				y=tan(angle);
				em=sq*y+am;
			} while (em < 0.0 || em >= (en+1.0)); 
			em=floor(em); 
			t=1.2*sq*(1.0+y*y)*exp(oldg-gammln(em+1.0)-gammln(en-em+1.0)+em*plog+(en-em)*pclog);
		} while (ran2() > t); bnl=em; 
	}
	if (p != pp) bnl=n-bnl; 
	return (int)bnl;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x70, %rsp
movl %edi, %ebx
movsd 0x1316(%rip), %xmm3     # 0x95d0
movapd %xmm3, %xmm2
subsd %xmm0, %xmm2
movapd %xmm0, %xmm4
cmplesd 0x1521(%rip), %xmm4     # 0x97f0
movapd %xmm4, %xmm1
movapd %xmm0, 0x60(%rsp)
andpd %xmm0, %xmm1
andnpd %xmm2, %xmm4
orpd %xmm1, %xmm4
movapd %xmm4, %xmm2
xorps %xmm0, %xmm0
cvtsi2sd %edi, %xmm0
cmpl $0x18, %edi
movapd %xmm0, 0x50(%rsp)
jg 0x834c
testl %ebx, %ebx
jle 0x8483
xorpd %xmm1, %xmm1
movsd %xmm2, (%rsp)
movapd %xmm1, 0x10(%rsp)
callq 0x7a7b
movsd (%rsp), %xmm2
movapd 0x10(%rsp), %xmm3
movapd %xmm3, %xmm1
addsd 0x12a2(%rip), %xmm1     # 0x95d0
cmpltsd %xmm2, %xmm0
andpd %xmm0, %xmm1
andnpd %xmm3, %xmm0
orpd %xmm1, %xmm0
movapd %xmm0, %xmm1
decl %ebx
jne 0x830c
jmp 0x85d5
mulsd %xmm0, %xmm4
ucomisd %xmm4, %xmm3
movsd %xmm2, (%rsp)
jbe 0x83c1
xorpd 0x14ed(%rip), %xmm4     # 0x9850
movapd %xmm4, %xmm0
callq 0x34e0
movsd 0x125c(%rip), %xmm1     # 0x95d0
movsd %xmm0, 0x8(%rsp)
leal 0x1(%rbx), %r14d
xorl %ebp, %ebp
movsd %xmm1, 0x10(%rsp)
callq 0x7a7b
movapd %xmm0, %xmm1
mulsd 0x10(%rsp), %xmm1
movsd 0x8(%rsp), %xmm0
ucomisd %xmm1, %xmm0
ja 0x83ab
incl %ebp
cmpl %ebp, %r14d
jne 0x8380
movl %r14d, %ebp
cmpl %ebx, %ebp
cmovll %ebp, %ebx
xorps %xmm0, %xmm0
cvtsi2sd %ebx, %xmm0
movsd (%rsp), %xmm2
jmp 0x85d5
cmpl %ebx, 0x4f01(%rip)      # 0xd2c8
movapd %xmm4, 0x20(%rsp)
je 0x840f
movapd 0x50(%rsp), %xmm1
movsd %xmm1, 0x5073(%rip)     # 0xd450
movsd 0x11eb(%rip), %xmm0     # 0x95d0
addsd %xmm1, %xmm0
callq 0x7ca4
movapd 0x20(%rsp), %xmm4
movsd 0x11d4(%rip), %xmm3     # 0x95d0
movsd (%rsp), %xmm2
movsd %xmm0, 0x504f(%rip)     # 0xd458
movl %ebx, 0x4eb9(%rip)      # 0xd2c8
ucomisd 0x4eb9(%rip), %xmm2     # 0xd2d0
jne 0x841b
jnp 0x8464
movapd %xmm3, %xmm0
subsd %xmm2, %xmm0
movsd %xmm0, 0x500d(%rip)     # 0xd438
movapd %xmm2, %xmm0
callq 0x31d0
movsd %xmm0, 0x5004(%rip)     # 0xd440
movsd 0x4ff4(%rip), %xmm0     # 0xd438
callq 0x31d0
movapd 0x20(%rsp), %xmm4
movsd (%rsp), %xmm2
movsd %xmm0, 0x4fec(%rip)     # 0xd448
movsd %xmm2, 0x4e6c(%rip)     # 0xd2d0
addsd %xmm4, %xmm4
mulsd 0x4fc8(%rip), %xmm4     # 0xd438
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm4
jb 0x848c
xorps %xmm0, %xmm0
sqrtsd %xmm4, %xmm0
jmp 0x8495
xorpd %xmm0, %xmm0
jmp 0x85d5
movapd %xmm4, %xmm0
callq 0x31c0
movsd 0x13ab(%rip), %xmm1     # 0x9848
movsd %xmm0, 0x48(%rsp)
mulsd %xmm0, %xmm1
movsd %xmm1, 0x40(%rsp)
callq 0x7a7b
mulsd 0x137e(%rip), %xmm0     # 0x9838
callq 0x3170
movapd %xmm0, %xmm2
movsd 0x48(%rsp), %xmm0
mulsd %xmm2, %xmm0
addsd 0x20(%rsp), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
movsd 0x4f6d(%rip), %xmm1     # 0xd450
addsd 0x10e5(%rip), %xmm1     # 0x95d0
ja 0x84ad
ucomisd %xmm1, %xmm0
jae 0x84ad
movsd %xmm2, 0x10(%rsp)
callq 0x3450
movapd %xmm0, %xmm2
movapd %xmm0, 0x30(%rsp)
movsd 0x10(%rsp), %xmm1
mulsd %xmm1, %xmm1
movsd 0x10b6(%rip), %xmm3     # 0x95d0
addsd %xmm3, %xmm1
mulsd 0x40(%rsp), %xmm1
movsd %xmm1, 0x10(%rsp)
movsd 0x4f26(%rip), %xmm0     # 0xd458
movsd %xmm0, 0x8(%rsp)
addsd %xmm3, %xmm2
movapd %xmm2, %xmm0
callq 0x7ca4
movsd 0x8(%rsp), %xmm1
subsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd 0x4ef3(%rip), %xmm0     # 0xd450
subsd 0x30(%rsp), %xmm0
addsd 0x1065(%rip), %xmm0     # 0x95d0
callq 0x7ca4
movsd 0x8(%rsp), %xmm3
subsd %xmm0, %xmm3
movsd 0x4ebe(%rip), %xmm1     # 0xd440
movapd 0x30(%rsp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm3, %xmm1
movsd 0x4eb8(%rip), %xmm0     # 0xd450
subsd %xmm2, %xmm0
mulsd 0x4ea4(%rip), %xmm0     # 0xd448
addsd %xmm1, %xmm0
callq 0x34e0
mulsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
callq 0x7a7b
ucomisd 0x10(%rsp), %xmm0
ja 0x84ad
movsd (%rsp), %xmm2
movapd 0x30(%rsp), %xmm0
movapd 0x50(%rsp), %xmm1
subsd %xmm0, %xmm1
movapd 0x60(%rsp), %xmm3
cmpneqsd %xmm2, %xmm3
andpd %xmm3, %xmm1
andnpd %xmm0, %xmm3
orpd %xmm1, %xmm3
cvttsd2si %xmm3, %eax
addq $0x70, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nop