// File: /workspace/github_cpp_makefile_star2_O3/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 0x13ed(%rip), %xmm3     # 0x95c8
movapd %xmm3, %xmm2
subsd %xmm0, %xmm2
movapd %xmm0, %xmm4
cmplesd 0x15d8(%rip), %xmm4     # 0x97c8
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 0x826d
testl %ebx, %ebx
jle 0x83a4
xorpd %xmm1, %xmm1
movsd %xmm2, (%rsp)
movapd %xmm1, 0x10(%rsp)
callq 0x79af
movsd (%rsp), %xmm2
movapd 0x10(%rsp), %xmm3
movapd %xmm3, %xmm1
addsd 0x1379(%rip), %xmm1     # 0x95c8
cmpltsd %xmm2, %xmm0
andpd %xmm0, %xmm1
andnpd %xmm3, %xmm0
orpd %xmm1, %xmm0
movapd %xmm0, %xmm1
decl %ebx
jne 0x822d
jmp 0x84f6
mulsd %xmm0, %xmm4
ucomisd %xmm4, %xmm3
movsd %xmm2, (%rsp)
jbe 0x82e2
xorpd 0x15ac(%rip), %xmm4     # 0x9830
movapd %xmm4, %xmm0
callq 0x34e0
movsd 0x1333(%rip), %xmm1     # 0x95c8
movsd %xmm0, 0x8(%rsp)
leal 0x1(%rbx), %r14d
xorl %ebp, %ebp
movsd %xmm1, 0x10(%rsp)
callq 0x79af
movapd %xmm0, %xmm1
mulsd 0x10(%rsp), %xmm1
movsd 0x8(%rsp), %xmm0
ucomisd %xmm1, %xmm0
ja 0x82cc
incl %ebp
cmpl %ebp, %r14d
jne 0x82a1
movl %r14d, %ebp
cmpl %ebx, %ebp
cmovll %ebp, %ebx
xorps %xmm0, %xmm0
cvtsi2sd %ebx, %xmm0
movsd (%rsp), %xmm2
jmp 0x84f6
cmpl %ebx, 0x4fe0(%rip)      # 0xd2c8
movapd %xmm4, 0x20(%rsp)
je 0x8330
movapd 0x50(%rsp), %xmm1
movsd %xmm1, 0x5152(%rip)     # 0xd450
movsd 0x12c2(%rip), %xmm0     # 0x95c8
addsd %xmm1, %xmm0
callq 0x7bb7
movapd 0x20(%rsp), %xmm4
movsd 0x12ab(%rip), %xmm3     # 0x95c8
movsd (%rsp), %xmm2
movsd %xmm0, 0x512e(%rip)     # 0xd458
movl %ebx, 0x4f98(%rip)      # 0xd2c8
ucomisd 0x4f98(%rip), %xmm2     # 0xd2d0
jne 0x833c
jnp 0x8385
movapd %xmm3, %xmm0
subsd %xmm2, %xmm0
movsd %xmm0, 0x50ec(%rip)     # 0xd438
movapd %xmm2, %xmm0
callq 0x31d0
movsd %xmm0, 0x50e3(%rip)     # 0xd440
movsd 0x50d3(%rip), %xmm0     # 0xd438
callq 0x31d0
movapd 0x20(%rsp), %xmm4
movsd (%rsp), %xmm2
movsd %xmm0, 0x50cb(%rip)     # 0xd448
movsd %xmm2, 0x4f4b(%rip)     # 0xd2d0
addsd %xmm4, %xmm4
mulsd 0x50a7(%rip), %xmm4     # 0xd438
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm4
jb 0x83ad
xorps %xmm0, %xmm0
sqrtsd %xmm4, %xmm0
jmp 0x83b6
xorpd %xmm0, %xmm0
jmp 0x84f6
movapd %xmm4, %xmm0
callq 0x31c0
movsd 0x1462(%rip), %xmm1     # 0x9820
movsd %xmm0, 0x48(%rsp)
mulsd %xmm0, %xmm1
movsd %xmm1, 0x40(%rsp)
callq 0x79af
mulsd 0x1435(%rip), %xmm0     # 0x9810
callq 0x3170
movapd %xmm0, %xmm2
movsd 0x48(%rsp), %xmm0
mulsd %xmm2, %xmm0
addsd 0x20(%rsp), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
movsd 0x504c(%rip), %xmm1     # 0xd450
addsd 0x11bc(%rip), %xmm1     # 0x95c8
ja 0x83ce
ucomisd %xmm1, %xmm0
jae 0x83ce
movsd %xmm2, 0x10(%rsp)
callq 0x3450
movapd %xmm0, %xmm2
movapd %xmm0, 0x30(%rsp)
movsd 0x10(%rsp), %xmm1
mulsd %xmm1, %xmm1
movsd 0x118d(%rip), %xmm3     # 0x95c8
addsd %xmm3, %xmm1
mulsd 0x40(%rsp), %xmm1
movsd %xmm1, 0x10(%rsp)
movsd 0x5005(%rip), %xmm0     # 0xd458
movsd %xmm0, 0x8(%rsp)
addsd %xmm3, %xmm2
movapd %xmm2, %xmm0
callq 0x7bb7
movsd 0x8(%rsp), %xmm1
subsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd 0x4fd2(%rip), %xmm0     # 0xd450
subsd 0x30(%rsp), %xmm0
addsd 0x113c(%rip), %xmm0     # 0x95c8
callq 0x7bb7
movsd 0x8(%rsp), %xmm3
subsd %xmm0, %xmm3
movsd 0x4f9d(%rip), %xmm1     # 0xd440
movapd 0x30(%rsp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm3, %xmm1
movsd 0x4f97(%rip), %xmm0     # 0xd450
subsd %xmm2, %xmm0
mulsd 0x4f83(%rip), %xmm0     # 0xd448
addsd %xmm1, %xmm0
callq 0x34e0
mulsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
callq 0x79af
ucomisd 0x10(%rsp), %xmm0
ja 0x83ce
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