// File: /workspace/github_c_makefile_star2_O0/c-zhou[P]yahs/binomlite.c
// Function: qbinom
double qbinom(double p, double n, double pr, int lower_tail, int log_p)
{
    double q, mu, sigma, gamma, z, y;

    if (pr == 0. || n == 0)
        return 0.;

    q = 1 - pr;
    if(q == 0.)
        return n; /* covers the full range of the distribution */
    mu = n * pr;
    sigma = sqrt(n * pr * q);
    gamma = (q - pr) / sigma;

    if(!lower_tail || log_p) {
        p = R_DT_qIv(p); /* need check again (cancellation!): */
        if (p == 0.) return 0.;
        if (p == 1.) return n;
    }
    /* temporary hack --- FIXME --- */
    if (p + 1.01 * DBL_EPSILON >= 1.)
        return n;

    /* y := approx.value (Cornish-Fisher expansion) :  */
    z = qnorm(p, 0., 1., /*lower_tail*/1, /*log_p*/0);
    y = floor(mu + sigma * (z + gamma * (z * z - 1) / 6) + 0.5);

    if (y > n) /* way off */
        y = n;

    z = pbinom(y, n, pr, /*lower_tail*/1, /*log_p*/0);

    /* fuzz to ensure left continuity: */
    p *= 1 - 64 * DBL_EPSILON;

    if (n < 1e5)
        return do_search(y, &z, p, n, pr, 1);
    /* Otherwise be a bit cleverer in the search */
    {
        double incr = floor(n * 0.001), oldincr;
        do {
            oldincr = incr;
            y = do_search(y, &z, p, n, pr, incr);
            incr = fmax2(1, floor(incr / 100));
        } while (oldincr > 1 && incr > n * 1e-15);
        return y;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movsd %xmm2, -0x20(%rbp)
movl %edi, -0x24(%rbp)
movl %esi, -0x28(%rbp)
movsd -0x20(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x249e2
jp 0x249e2
jmp 0x249f2
movsd -0x18(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x249ff
jp 0x249ff
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x24d81
movsd 0xcbf1(%rip), %xmm0     # 0x315f8
subsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x30(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x24a30
jp 0x24a30
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x24d81
movsd -0x18(%rbp), %xmm0
mulsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x18(%rbp), %xmm0
mulsd -0x20(%rbp), %xmm0
mulsd -0x30(%rbp), %xmm0
callq 0x2500
movsd %xmm0, -0x40(%rbp)
movsd -0x30(%rbp), %xmm0
subsd -0x20(%rbp), %xmm0
divsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x24a7c
cmpl $0x0, -0x28(%rbp)
je 0x24b52
cmpl $0x0, -0x28(%rbp)
je 0x24acb
cmpl $0x0, -0x24(%rbp)
je 0x24a99
movsd -0x10(%rbp), %xmm0
callq 0x2560
movsd %xmm0, -0x70(%rbp)
jmp 0x24abf
movsd -0x10(%rbp), %xmm0
callq 0x22f0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
jmp 0x24b05
cmpl $0x0, -0x24(%rbp)
je 0x24add
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
jmp 0x24afb
movsd 0xcb1b(%rip), %xmm0     # 0x31600
subsd -0x10(%rbp), %xmm0
movsd 0xcb0e(%rip), %xmm1     # 0x31600
addsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x24b2c
jp 0x24b2c
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x24d81
movsd -0x10(%rbp), %xmm0
movsd 0xcabf(%rip), %xmm1     # 0x315f8
ucomisd %xmm1, %xmm0
jne 0x24b50
jp 0x24b50
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x24d81
jmp 0x24b52
movsd 0xdec6(%rip), %xmm0     # 0x32a20
addsd -0x10(%rbp), %xmm0
movsd 0xca91(%rip), %xmm1     # 0x315f8
ucomisd %xmm1, %xmm0
jb 0x24b7c
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x24d81
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
movsd 0xca6c(%rip), %xmm2     # 0x315f8
movl $0x1, %edi
xorl %esi, %esi
callq 0x23bb0
movsd %xmm0, -0x50(%rbp)
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm0
movsd -0x50(%rbp), %xmm2
movsd -0x48(%rbp), %xmm3
movsd -0x50(%rbp), %xmm4
movsd -0x50(%rbp), %xmm5
mulsd %xmm5, %xmm4
movsd 0xdcb1(%rip), %xmm5     # 0x32878
addsd %xmm5, %xmm4
mulsd %xmm4, %xmm3
movsd 0xde51(%rip), %xmm4     # 0x32a28
divsd %xmm4, %xmm3
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0xca11(%rip), %xmm1     # 0x31600
addsd %xmm1, %xmm0
callq 0x2480
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
ucomisd -0x18(%rbp), %xmm0
jbe 0x24c13
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
movsd -0x18(%rbp), %xmm1
movsd -0x20(%rbp), %xmm2
movl $0x1, %edi
xorl %esi, %esi
callq 0x24810
movsd %xmm0, -0x50(%rbp)
movsd 0xddfd(%rip), %xmm0     # 0x32a38
mulsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0xdde3(%rip), %xmm0     # 0x32a30
ucomisd -0x18(%rbp), %xmm0
jbe 0x24c83
movsd -0x58(%rbp), %xmm0
movsd -0x10(%rbp), %xmm1
movsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm3
leaq -0x50(%rbp), %rdi
movsd 0xc984(%rip), %xmm4     # 0x315f8
callq 0x24d90
movsd %xmm0, -0x8(%rbp)
jmp 0x24d81
movsd 0xdb15(%rip), %xmm0     # 0x327a0
mulsd -0x18(%rbp), %xmm0
callq 0x2480
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x58(%rbp), %xmm0
movsd -0x10(%rbp), %xmm1
movsd -0x18(%rbp), %xmm2
movsd -0x20(%rbp), %xmm3
movsd -0x60(%rbp), %xmm4
leaq -0x50(%rbp), %rdi
callq 0x24d90
movsd %xmm0, -0x58(%rbp)
movsd -0x60(%rbp), %xmm0
movsd 0xdad8(%rip), %xmm1     # 0x327b0
divsd %xmm1, %xmm0
callq 0x2480
movaps %xmm0, %xmm1
movsd 0xc90c(%rip), %xmm0     # 0x315f8
ucomisd %xmm1, %xmm0
jb 0x24d04
movsd 0xc8fe(%rip), %xmm0     # 0x315f8
movsd %xmm0, -0x88(%rbp)
jmp 0x24d22
movsd -0x60(%rbp), %xmm0
movsd 0xda9f(%rip), %xmm1     # 0x327b0
divsd %xmm1, %xmm0
callq 0x2480
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x68(%rbp), %xmm0
xorl %eax, %eax
movsd 0xc8ba(%rip), %xmm1     # 0x315f8
ucomisd %xmm1, %xmm0
movb %al, -0x89(%rbp)
jbe 0x24d69
movsd -0x60(%rbp), %xmm0
movsd 0xda41(%rip), %xmm1     # 0x32798
mulsd -0x18(%rbp), %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0x89(%rbp)
movb -0x89(%rbp), %al
testb $0x1, %al
jne 0x24c9a
movsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
addq $0x90, %rsp
popq %rbp
retq
nop