// File: millanek[P]Dsuite/KolmogorovSmirnovDist.cpp
// Function: Pelz(int, double)
static double Pelz (int n, double x)
{
   /* Approximating the Lower Tail-Areas of the Kolmogorov-Smirnov One-Sample
      Statistic,
      Wolfgang Pelz and I. J. Good,
      Journal of the Royal Statistical Society, Series B.
      Vol. 38, No. 2 (1976), pp. 152-156
   */

   const int JMAX = 20;
   const double EPS = 1.0e-10;
   const double C = 2.506628274631001;         /* sqrt(2*Pi) */
   const double C2 = 1.2533141373155001;       /* sqrt(Pi/2) */
   const double PI2 = num_Pi * num_Pi;
   const double PI4 = PI2 * PI2;
   const double RACN = sqrt ((double) n);
   const double z = RACN * x;
   const double z2 = z * z;
   const double z4 = z2 * z2;
   const double z6 = z4 * z2;
   const double w = PI2 / (2.0 * z * z);
   double ti, term, tom;
   double sum;
   int j;

   term = 1;
   j = 0;
   sum = 0;
   while (j <= JMAX && term > EPS * sum) {
      ti = j + 0.5;
      term = exp (-ti * ti * w);
      sum += term;
      j++;
   }
   sum *= C / z;

   term = 1;
   tom = 0;
   j = 0;
   while (j <= JMAX && fabs (term) > EPS * fabs (tom)) {
      ti = j + 0.5;
      term = (PI2 * ti * ti - z2) * exp (-ti * ti * w);
      tom += term;
      j++;
   }
   sum += tom * C2 / (RACN * 3.0 * z4);

   term = 1;
   tom = 0;
   j = 0;
   while (j <= JMAX && fabs (term) > EPS * fabs (tom)) {
      ti = j + 0.5;
      term = 6 * z6 + 2 * z4 + PI2 * (2 * z4 - 5 * z2) * ti * ti +
         PI4 * (1 - 2 * z2) * ti * ti * ti * ti;
      term *= exp (-ti * ti * w);
      tom += term;
      j++;
   }
   sum += tom * C2 / (n * 36.0 * z * z6);

   term = 1;
   tom = 0;
   j = 1;
   while (j <= JMAX && term > EPS * tom) {
      ti = j;
      term = PI2 * ti * ti * exp (-ti * ti * w);
      tom += term;
      j++;
   }
   sum -= tom * C2 / (n * 18.0 * z * z2);

   term = 1;
   tom = 0;
   j = 0;
   while (j <= JMAX && fabs (term) > EPS * fabs (tom)) {
      ti = j + 0.5;
      ti = ti * ti;
      term = -30 * z6 - 90 * z6 * z2 + PI2 * (135 * z4 - 96 * z6) * ti +
         PI4 * (212 * z4 - 60 * z2) * ti * ti + PI2 * PI4 * ti * ti * ti * (5 -
         30 * z2);
      term *= exp (-ti * w);
      tom += term;
      j++;
   }
   sum += tom * C2 / (RACN * n * 3240.0 * z4 * z6);

   term = 1;
   tom = 0;
   j = 1;
   while (j <= JMAX && fabs (term) > EPS * fabs (tom)) {
      ti = j * j;
      term = (3 * PI2 * ti * z2 - PI4 * ti * ti) * exp (-ti * w);
      tom += term;
      j++;
   }
   sum += tom * C2 / (RACN * n * 108.0 * z6);

   return sum;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movl %edi, -0x4(%rbp)
movsd %xmm0, -0x10(%rbp)
movl $0x14, -0x14(%rbp)
movsd 0x747e(%rip), %xmm0     # 0x8d750
movsd %xmm0, -0x20(%rbp)
movsd 0x7469(%rip), %xmm0     # 0x8d748
movsd %xmm0, -0x28(%rbp)
movsd 0x7454(%rip), %xmm0     # 0x8d740
movsd %xmm0, -0x30(%rbp)
movsd 0x7437(%rip), %xmm0     # 0x8d730
movsd %xmm0, -0x38(%rbp)
movsd 0x7432(%rip), %xmm0     # 0x8d738
movsd %xmm0, -0x40(%rbp)
cvtsi2sdl -0x4(%rbp), %xmm0
callq 0x8470
movsd %xmm0, -0x48(%rbp)
movsd -0x48(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x50(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
mulsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x60(%rbp), %xmm0
mulsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd 0x2162(%rip), %xmm1     # 0x884c0
mulsd -0x50(%rbp), %xmm1
mulsd -0x50(%rbp), %xmm1
movsd 0x73c0(%rip), %xmm0     # 0x8d730
divsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movsd 0x2127(%rip), %xmm0     # 0x884a8
movsd %xmm0, -0x80(%rbp)
movl $0x0, -0x94(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x90(%rbp)
xorl %eax, %eax
cmpl $0x14, -0x94(%rbp)
movb %al, -0x95(%rbp)
jg 0x863ce
movsd -0x80(%rbp), %xmm0
movsd 0x7397(%rip), %xmm1     # 0x8d750
mulsd -0x90(%rbp), %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0x95(%rbp)
movb -0x95(%rbp), %al
testb $0x1, %al
jne 0x863da
jmp 0x8644c
cvtsi2sdl -0x94(%rbp), %xmm0
movsd 0x20c6(%rip), %xmm1     # 0x884b0
addsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
callq 0x8a70
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x8639b
movsd 0x72f4(%rip), %xmm0     # 0x8d748
divsd -0x50(%rbp), %xmm0
mulsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd 0x2037(%rip), %xmm0     # 0x884a8
movsd %xmm0, -0x80(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x94(%rbp)
xorl %eax, %eax
cmpl $0x14, -0x94(%rbp)
movb %al, -0x96(%rbp)
jg 0x864d8
movsd -0x80(%rbp), %xmm0
movaps 0x2f28(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm0
movsd -0x88(%rbp), %xmm2
movaps 0x2f15(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm2
movsd 0x7289(%rip), %xmm1     # 0x8d750
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0x96(%rbp)
movb -0x96(%rbp), %al
testb $0x1, %al
jne 0x864e7
jmp 0x865a6
cvtsi2sdl -0x94(%rbp), %xmm0
movsd 0x1fb9(%rip), %xmm1     # 0x884b0
addsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd 0x7228(%rip), %xmm0     # 0x8d730
mulsd -0x78(%rbp), %xmm0
movsd -0x78(%rbp), %xmm2
movsd -0x58(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x78(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
callq 0x8a70
movaps %xmm0, %xmm1
movsd -0xa0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x8648b
movsd 0x7192(%rip), %xmm0     # 0x8d740
mulsd -0x88(%rbp), %xmm0
movsd 0x719a(%rip), %xmm1     # 0x8d758
mulsd -0x48(%rbp), %xmm1
mulsd -0x60(%rbp), %xmm1
divsd %xmm1, %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd 0x1ec4(%rip), %xmm0     # 0x884a8
movsd %xmm0, -0x80(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x94(%rbp)
xorl %eax, %eax
cmpl $0x14, -0x94(%rbp)
movb %al, -0xa1(%rbp)
jg 0x8664b
movsd -0x80(%rbp), %xmm0
movaps 0x2db5(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm0
movsd -0x88(%rbp), %xmm2
movaps 0x2da2(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm2
movsd 0x7116(%rip), %xmm1     # 0x8d750
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0xa1(%rbp)
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0x8665a
jmp 0x86784
cvtsi2sdl -0x94(%rbp), %xmm0
movsd 0x1e46(%rip), %xmm1     # 0x884b0
addsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x68(%rbp), %xmm0
movsd 0x1e40(%rip), %xmm1     # 0x884c0
mulsd -0x60(%rbp), %xmm1
movsd 0x7133(%rip), %xmm2     # 0x8d7c0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x60(%rbp), %xmm2
movsd 0x70e6(%rip), %xmm1     # 0x8d788
mulsd -0x58(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
addsd %xmm2, %xmm2
addsd %xmm1, %xmm2
movsd 0x7062(%rip), %xmm1     # 0x8d730
mulsd %xmm2, %xmm1
mulsd -0x78(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x58(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd 0x1db3(%rip), %xmm2     # 0x884a8
subsd %xmm0, %xmm2
movsd 0x7037(%rip), %xmm0     # 0x8d738
mulsd %xmm2, %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x78(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
callq 0x8a70
mulsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x865fe
movsd 0x6fb4(%rip), %xmm0     # 0x8d740
mulsd -0x88(%rbp), %xmm0
cvtsi2sdl -0x4(%rbp), %xmm1
movsd 0x6fbf(%rip), %xmm2     # 0x8d760
mulsd %xmm2, %xmm1
mulsd -0x50(%rbp), %xmm1
mulsd -0x68(%rbp), %xmm1
divsd %xmm1, %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd 0x1cdd(%rip), %xmm0     # 0x884a8
movsd %xmm0, -0x80(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x1, -0x94(%rbp)
xorl %eax, %eax
cmpl $0x14, -0x94(%rbp)
movb %al, -0xa2(%rbp)
jg 0x86818
movsd -0x80(%rbp), %xmm0
movsd 0x6f4d(%rip), %xmm1     # 0x8d750
mulsd -0x88(%rbp), %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0xa2(%rbp)
movb -0xa2(%rbp), %al
testb $0x1, %al
jne 0x86827
jmp 0x868b6
cvtsi2sdl -0x94(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd 0x6ef4(%rip), %xmm0     # 0x8d730
mulsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0x78(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
callq 0x8a70
movaps %xmm0, %xmm1
movsd -0xb0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x867e5
movsd 0x6e82(%rip), %xmm1     # 0x8d740
mulsd -0x88(%rbp), %xmm1
cvtsi2sdl -0x4(%rbp), %xmm0
movsd 0x6e35(%rip), %xmm2     # 0x8d708
mulsd %xmm2, %xmm0
mulsd -0x50(%rbp), %xmm0
mulsd -0x58(%rbp), %xmm0
divsd %xmm0, %xmm1
movsd -0x90(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movsd 0x1ba7(%rip), %xmm0     # 0x884a8
movsd %xmm0, -0x80(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x94(%rbp)
xorl %eax, %eax
cmpl $0x14, -0x94(%rbp)
movb %al, -0xb1(%rbp)
jg 0x86968
movsd -0x80(%rbp), %xmm0
movaps 0x2a98(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm0
movsd -0x88(%rbp), %xmm2
movaps 0x2a85(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm2
movsd 0x6df9(%rip), %xmm1     # 0x8d750
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0xb1(%rbp)
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0x86977
jmp 0x86b20
cvtsi2sdl -0x94(%rbp), %xmm0
movsd 0x1b29(%rip), %xmm1     # 0x884b0
addsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x68(%rbp), %xmm1
movsd 0x6e0c(%rip), %xmm0     # 0x8d7b8
mulsd -0x68(%rbp), %xmm0
mulsd -0x58(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x6dab(%rip), %xmm2     # 0x8d780
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x60(%rbp), %xmm2
movsd 0x6dc6(%rip), %xmm0     # 0x8d7b0
mulsd -0x68(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x6d9a(%rip), %xmm3     # 0x8d7a8
mulsd %xmm3, %xmm2
addsd %xmm0, %xmm2
movsd 0x6d12(%rip), %xmm0     # 0x8d730
mulsd %xmm2, %xmm0
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x60(%rbp), %xmm2
movsd 0x6d64(%rip), %xmm1     # 0x8d7a0
mulsd -0x58(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x6d38(%rip), %xmm3     # 0x8d798
mulsd %xmm3, %xmm2
addsd %xmm1, %xmm2
movsd 0x6cc8(%rip), %xmm1     # 0x8d738
mulsd %xmm2, %xmm1
mulsd -0x78(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x6d02(%rip), %xmm0     # 0x8d790
mulsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
movsd -0x58(%rbp), %xmm2
movsd 0x6cd6(%rip), %xmm3     # 0x8d780
mulsd %xmm3, %xmm2
movsd 0x6cd2(%rip), %xmm3     # 0x8d788
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x78(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x70(%rbp), %xmm0
callq 0x8a70
mulsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x8691b
movsd 0x6c18(%rip), %xmm0     # 0x8d740
mulsd -0x88(%rbp), %xmm0
movsd -0x48(%rbp), %xmm1
cvtsi2sdl -0x4(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x6c22(%rip), %xmm2     # 0x8d768
mulsd %xmm2, %xmm1
mulsd -0x60(%rbp), %xmm1
mulsd -0x68(%rbp), %xmm1
divsd %xmm1, %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd 0x1938(%rip), %xmm0     # 0x884a8
movsd %xmm0, -0x80(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x1, -0x94(%rbp)
xorl %eax, %eax
cmpl $0x14, -0x94(%rbp)
movb %al, -0xb2(%rbp)
jg 0x86bd7
movsd -0x80(%rbp), %xmm0
movaps 0x2829(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm0
movsd -0x88(%rbp), %xmm2
movaps 0x2816(%rip), %xmm1     # 0x893d0
pand %xmm1, %xmm2
movsd 0x6b8a(%rip), %xmm1     # 0x8d750
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0xb2(%rbp)
movb -0xb2(%rbp), %al
testb $0x1, %al
jne 0x86be6
jmp 0x86caa
movl -0x94(%rbp), %eax
imull -0x94(%rbp), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd 0x6b74(%rip), %xmm0     # 0x8d778
mulsd -0x78(%rbp), %xmm0
movsd -0x58(%rbp), %xmm2
movsd 0x6b22(%rip), %xmm1     # 0x8d738
mulsd -0x78(%rbp), %xmm1
mulsd -0x78(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xc0(%rbp)
movsd -0x78(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x70(%rbp), %xmm0
callq 0x8a70
movaps %xmm0, %xmm1
movsd -0xc0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x86b8a
movsd 0x6a8e(%rip), %xmm0     # 0x8d740
mulsd -0x88(%rbp), %xmm0
movsd -0x48(%rbp), %xmm1
cvtsi2sdl -0x4(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x6aa0(%rip), %xmm2     # 0x8d770
mulsd %xmm2, %xmm1
mulsd -0x68(%rbp), %xmm1
divsd %xmm1, %xmm0
addsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
addq $0xc0, %rsp
popq %rbp
retq
nop