// File: /workspace/github_cpp_makefile_star2_O2/Cell-veto[P]postlhc/./pareto_prober.hpp
// Function: ParetoProber::setup(double, double, unsigned int)
void setup (double int_dist, double exponent, unsigned DIM)
    {
        if (exponent <= DIM-1.)
            rt_error ("IPL exponent too small");

        // inner radius of zero shell would be rep_int_distance - error_bound
        // FIXME not implemented
        paralpha0 = exponent - (DIM-1);
        marginal_rate = pow (int_dist, -exponent-1);
        zeroshell_radius = int_dist + error_bound;

        double longrange_pr[3];
        if (DIM == 2)
        {
            longrange_pr[0] = 1.;
            longrange_pr[1] = error_bound;
            longrange_pr[2] = NAN;
        }
        else if (DIM == 3)
        {
            longrange_pr[0] = 1.;
            longrange_pr[1] = 2.*error_bound;
            longrange_pr[2] = sq (error_bound);
        }
        else
        {
            std::cerr << "DIM > 3 not implemented in pareto prober" << ABORT;
        }

        total_pr = 0.;
        static bool once = true;
        if (once) std::cerr << "total_pr ";
        for (unsigned n = 0; n != DIM; ++n)
        {
            // integrate out pareto distribution
            longrange_pr[n] *= pow (int_dist, -paralpha0-n) / (paralpha0+n);
            longrange_pr[n] *= sphere_surface (DIM);
            assert (longrange_pr[n] >= 0.);
            total_pr += longrange_pr[n];
            towerp[n] = total_pr;
            if (once) std::cerr << total_pr << ' ';
        }

        // zeroshell
        total_pr += marginal_rate * ball_volume (DIM, zeroshell_radius);
        if (once) std::cerr << total_pr << '\n';
        once = false;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl %esi, %r14d
cvtsi2sd %r14, %xmm2
addsd 0x1a1ec2(%rip), %xmm2   # 0x5bf130
ucomisd %xmm1, %xmm2
jae 0x41d47a
movl %esi, %r15d
movq %rdi, %rbx
leal -0x1(%r15), %eax
cvtsi2sd %rax, %xmm3
movapd %xmm1, %xmm2
subsd %xmm3, %xmm2
movsd %xmm2, 0x20(%rdi)
movsd 0x1a1e94(%rip), %xmm2   # 0x5bf130
subsd %xmm1, %xmm2
movapd %xmm2, %xmm1
movsd %xmm0, 0x18(%rsp)
callq 0x4e1d70
movsd 0x18(%rsp), %xmm2
movsd %xmm0, 0x8(%rbx)
movsd (%rbx), %xmm0
movapd %xmm0, %xmm1
addsd %xmm2, %xmm1
movsd %xmm1, 0x10(%rbx)
cmpl $0x3, %r15d
je 0x41d2fa
cmpl $0x2, %r15d
jne 0x41d49b
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rsp)
movsd %xmm0, 0x28(%rsp)
movsd 0x1a1dd8(%rip), %xmm0   # 0x5bf0d0
jmp 0x41d31b
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x20(%rsp)
movapd %xmm0, %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, 0x28(%rsp)
mulsd %xmm0, %xmm0
movsd %xmm0, 0x30(%rsp)
andq $0x0, 0x18(%rbx)
cmpb $0x1, 0x22de73(%rip)    # 0x64b1a0
jne 0x41d348
movq $0x64eaa0, %rdi         # imm = 0x64EAA0
leaq 0x1a52b1(%rip), %rsi    # 0x5c25ee
callq 0x4a4910
movsd 0x18(%rsp), %xmm2
xorl %r13d, %r13d
movq $0x64eaa0, %r12         # imm = 0x64EAA0
pushq $0x20
popq %rbp
cmpq %r13, %r14
je 0x41d3ff
movsd 0x20(%rbx), %xmm1
xorpd 0x1a1cf5(%rip), %xmm1   # 0x5bf060
movl %r13d, %eax
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0x10(%rsp)
subsd %xmm0, %xmm1
movapd %xmm2, %xmm0
callq 0x4e1d70
movsd 0x10(%rsp), %xmm1
addsd 0x20(%rbx), %xmm1
divsd %xmm1, %xmm0
mulsd 0x20(%rsp,%r13,8), %xmm0
movsd %xmm0, 0x10(%rsp)
movl %r15d, %edi
callq 0x40d9d2
mulsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp,%r13,8)
ucomisd 0x1a1d61(%rip), %xmm0   # 0x5bf120
jb 0x41d45d
addsd 0x18(%rbx), %xmm0
movsd %xmm0, 0x18(%rbx)
movsd %xmm0, 0x28(%rbx,%r13,8)
cmpb $0x1, 0x22ddc3(%rip)    # 0x64b1a0
jne 0x41d3f1
movq %r12, %rdi
callq 0x4a5640
movq %rax, %rdi
movl %ebp, %esi
callq 0x4a4840
incq %r13
movsd 0x18(%rsp), %xmm2
jmp 0x41d355
movsd 0x8(%rbx), %xmm0
movsd %xmm0, 0x10(%rsp)
movsd 0x10(%rbx), %xmm0
movl %r14d, %edi
callq 0x40d8e5
mulsd 0x10(%rsp), %xmm0
addsd 0x18(%rbx), %xmm0
movsd %xmm0, 0x18(%rbx)
cmpb $0x0, 0x22dd72(%rip)    # 0x64b1a0
je 0x41d447
movq $0x64eaa0, %rdi         # imm = 0x64EAA0
callq 0x4a5640
pushq $0xa
popq %rsi
movq %rax, %rdi
callq 0x4a4840
movb $0x0, 0x22dd52(%rip)    # 0x64b1a0
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1a5194(%rip), %rdi    # 0x5c25f8
leaq 0x1a51a3(%rip), %rsi    # 0x5c260e
leaq 0x1a51b0(%rip), %rcx    # 0x5c2622
pushq $0x3e
popq %rdx
callq 0x4ffe80
leaq 0x1a512d(%rip), %rsi    # 0x5c25ae
leaq 0x20(%rsp), %rbx
leaq 0xf(%rsp), %rdx
movq %rbx, %rdi
callq 0x406046
movq %rbx, %rdi
callq 0x434d5b
movq $0x64eaa0, %rdi         # imm = 0x64EAA0
leaq 0x1a511c(%rip), %rsi    # 0x5c25c5
callq 0x4a4910
leaq 0x2301bc(%rip), %rsi    # 0x64d671
movq %rax, %rdi
callq 0x434f95
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x4b4bf0
movq %rbx, %rdi
callq 0x4eb220