// File: Kingsford-Group[P]ghost2/src/sigApprox.hpp
// Function: rayleigh(Eigen::Matrix<double, -1, -1, 0, -1, -1>*)
double rayleigh(MatrixXd *A)
{
  int N=(*A).rows();
  double prev=200, cur;
  bool flag=false;
  VectorXd seed = randomVec(N);
  for(int i=0;i<1000;i++)
  {
    VectorXd mu = seed.transpose()*(*A)*seed;
    cur=mu[0];
    for(int i=0;i<N;i++)
      (*A)(i,i) -= cur;
    seed = (*A).ldlt().solve(seed);
    seed.normalize();
    for(int i=0;i<N;i++)
      (*A)(i,i) += cur;
    if(fabs(cur-prev) < ZERO) {flag=true; break;}
    prev=cur;
  }
//  if(!flag) cout << "warning: did not converge\n"; // uncomment for warning
  return cur;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x24690
movl %eax, -0xc(%rbp)
movsd 0xa75dd(%rip), %xmm0    # 0xbc060
movsd %xmm0, -0x18(%rbp)
movb $0x0, -0x21(%rbp)
movl -0xc(%rbp), %esi
leaq -0x38(%rbp), %rdi
callq 0x145d0
movl $0x0, -0x3c(%rbp)
cmpl $0x3e8, -0x3c(%rbp)     # imm = 0x3E8
jge 0x14d5f
leaq -0x38(%rbp), %rdi
callq 0x24a30
movq %rax, -0xf0(%rbp)
jmp 0x14abe
movq -0xf0(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rdx
leaq -0x78(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x24a60
jmp 0x14adc
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0x24ab0
jmp 0x14aef
leaq -0x50(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x24b00
jmp 0x14afe
leaq -0x78(%rbp), %rdi
callq 0x24ba0
xorl %eax, %eax
movl %eax, %esi
leaq -0x50(%rbp), %rdi
callq 0x24bc0
movq %rax, -0xf8(%rbp)
jmp 0x14b1d
movq -0xf8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x20(%rbp)
movl $0x0, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0x14be9
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x108(%rbp)
movq -0x8(%rbp), %rdi
movslq -0x90(%rbp), %rdx
movq %rdx, %rsi
callq 0x246b0
movq %rax, -0x100(%rbp)
jmp 0x14b6f
movq -0x100(%rbp), %rax
movsd -0x108(%rbp), %xmm1
movsd (%rax), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x14b37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x14d90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x24ba0
jmp 0x14d90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x14d54
movq -0x8(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x24770
jmp 0x14bfb
leaq -0xe0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x24850
movq %rdx, -0x118(%rbp)
movq %rax, -0x110(%rbp)
jmp 0x14c1b
movq -0x118(%rbp), %rax
movq -0x110(%rbp), %rcx
movq %rcx, -0xa0(%rbp)
movq %rax, -0x98(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x24930
jmp 0x14c49
leaq -0xe0(%rbp), %rdi
callq 0x249f0
leaq -0x38(%rbp), %rdi
callq 0x24610
jmp 0x14c60
movl $0x0, -0xe4(%rbp)
movl -0xe4(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0x14ce6
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x128(%rbp)
movq -0x8(%rbp), %rdi
movslq -0xe4(%rbp), %rdx
movq %rdx, %rsi
callq 0x246b0
movq %rax, -0x120(%rbp)
jmp 0x14c9e
movq -0x120(%rbp), %rax
movsd -0x128(%rbp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movl -0xe4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xe4(%rbp)
jmp 0x14c6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x249f0
jmp 0x14d54
movsd -0x20(%rbp), %xmm1
subsd -0x18(%rbp), %xmm1
movaps 0xa7429(%rip), %xmm0    # 0xbc120
pand %xmm0, %xmm1
movsd 0xa7365(%rip), %xmm0    # 0xbc068
ucomisd %xmm1, %xmm0
jbe 0x14d19
movb $0x1, -0x21(%rbp)
movl $0x2, -0xe8(%rbp)
jmp 0x14d2d
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movl $0x0, -0xe8(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x24650
movl -0xe8(%rbp), %eax
testl %eax, %eax
je 0x14d44
jmp 0x14d42
jmp 0x14d5f
jmp 0x14d46
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x14a9f
leaq -0x50(%rbp), %rdi
callq 0x24650
jmp 0x14d90
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x130(%rbp)
movl $0x1, -0xe8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x24650
movsd -0x130(%rbp), %xmm0
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x24650
movq -0x88(%rbp), %rdi
callq 0x10cc0
nopw %cs:(%rax,%rax)