// File: /workspace/github_cpp_makefile_star2_O2/ashlall[P]StreamStats/ChiSquareExperiments/./../SourceCode/ChiSquare/Chi_Square_Distribution.cpp
// Function: pochisq(double, int)
double pochisq(double x, int df)
   {
        double a, s;
        double e, c, z;
 
        if (x <= 0.0 || df < 1) {
            return 1.0;
        }
        a = 0.5 * x;
        bool even = (df & 1) == 0;
        double y = 0;
        if (df > 1) {
            y = ex(-a);
        }
        s = (even ? y : (2.0 * poz(-sqrt(x))));
        if (df > 2) {
            x = 0.5 * (df - 1.0);
            z = (even ? 1.0 : 0.5);
            if (a > MAX_X) {
                e = (even ? 0.0 : LOG_SQRT_PI);
                c = log(a);
                while (z <= x) {
                    e = log(z) + e;
                    s += ex(c * z - a - e);
                    z += 1.0;
                }
                return s;
            } else {
                e = (even ? 1.0 : (I_SQRT_PI / sqrt(a)));
                c = 0.0;
                while (z <= x) {
                    e = e * (a / z);
                    c = c + e;
                    z += 1.0;
                }
                return c * y + s;
            }
        } else {
            return s;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x48, %rsp
xorpd %xmm4, %xmm4
ucomisd %xmm0, %xmm4
setae %al
testl %edi, %edi
setle %cl
orb %al, %cl
je 0x3ca2
movsd 0x436b(%rip), %xmm3     # 0x8008
jmp 0x3e41
movl %edi, %ebx
movapd %xmm0, %xmm1
movsd 0x4388(%rip), %xmm2     # 0x8038
mulsd %xmm0, %xmm2
cmpl $0x2, %edi
movapd %xmm2, -0x40(%rbp)
jb 0x3ce2
movapd 0x450a(%rip), %xmm0     # 0x81d0
xorpd %xmm2, %xmm0
movsd %xmm1, -0x10(%rbp)
callq 0x3ec2
movsd -0x10(%rbp), %xmm1
movapd -0x40(%rbp), %xmm2
movapd %xmm0, %xmm4
movapd %xmm4, %xmm3
testb $0x1, %bl
je 0x3d28
movsd %xmm4, -0x18(%rbp)
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm1
jb 0x3d00
sqrtsd %xmm1, %xmm0
jmp 0x3d09
movapd %xmm1, %xmm0
callq 0x2160
xorpd 0x44bf(%rip), %xmm0     # 0x81d0
callq 0x3ee4
movapd %xmm0, %xmm3
addsd %xmm0, %xmm3
movapd -0x40(%rbp), %xmm2
movsd -0x18(%rbp), %xmm4
cmpl $0x3, %ebx
jb 0x3e41
xorl %eax, %eax
testb $0x1, %bl
sete %al
cvtsi2sd %ebx, %xmm5
addsd 0x42cb(%rip), %xmm5     # 0x8010
mulsd 0x42eb(%rip), %xmm5     # 0x8038
leaq 0x448c(%rip), %rcx      # 0x81e0
movsd (%rcx,%rax,8), %xmm6
cvtsi2sdl 0x9457(%rip), %xmm0 # 0xd1b8
ucomisd %xmm0, %xmm2
movsd %xmm5, -0x48(%rbp)
jbe 0x3e11
movsd %xmm6, -0x10(%rbp)
movsd %xmm3, -0x20(%rbp)
xorpd %xmm0, %xmm0
testb $0x1, %bl
je 0x3d8b
movsd 0x9455(%rip), %xmm0     # 0xd1e0
movsd %xmm0, -0x18(%rbp)
movapd %xmm2, %xmm0
callq 0x2170
movsd %xmm0, -0x28(%rbp)
movapd -0x40(%rbp), %xmm0
xorpd 0x4425(%rip), %xmm0     # 0x81d0
movapd %xmm0, -0x40(%rbp)
movsd -0x10(%rbp), %xmm2
movsd -0x48(%rbp), %xmm0
ucomisd %xmm2, %xmm0
jb 0x3e3c
movapd %xmm2, %xmm0
movsd %xmm2, -0x10(%rbp)
callq 0x2170
movsd -0x18(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd -0x28(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm1, -0x18(%rbp)
subsd %xmm1, %xmm0
callq 0x3ec2
movsd -0x10(%rbp), %xmm2
movsd -0x20(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, -0x20(%rbp)
addsd 0x41f9(%rip), %xmm2     # 0x8008
jmp 0x3db5
movsd 0x41ef(%rip), %xmm7     # 0x8008
movapd %xmm7, %xmm8
testb $0x1, %bl
je 0x3e96
movsd 0x93bc(%rip), %xmm8     # 0xd1e8
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm2
jb 0x3e4c
sqrtsd %xmm2, %xmm0
jmp 0x3e91
movsd -0x20(%rbp), %xmm3
movapd %xmm3, %xmm0
addq $0x48, %rsp
popq %rbx
popq %rbp
retq
movapd %xmm2, %xmm0
movsd %xmm3, -0x20(%rbp)
movsd %xmm4, -0x18(%rbp)
movsd %xmm6, -0x10(%rbp)
movsd %xmm8, -0x28(%rbp)
callq 0x2160
movsd -0x28(%rbp), %xmm8
movsd 0x4190(%rip), %xmm7     # 0x8008
movsd -0x10(%rbp), %xmm6
movsd -0x48(%rbp), %xmm5
movsd -0x18(%rbp), %xmm4
movsd -0x20(%rbp), %xmm3
movapd -0x40(%rbp), %xmm2
divsd %xmm0, %xmm8
xorpd %xmm0, %xmm0
ucomisd %xmm6, %xmm5
jb 0x3eb8
movapd %xmm2, %xmm1
divsd %xmm6, %xmm1
mulsd %xmm1, %xmm8
addsd %xmm8, %xmm0
addsd %xmm7, %xmm6
jmp 0x3e9a
mulsd %xmm4, %xmm0
addsd %xmm3, %xmm0
jmp 0x3e45