user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<qrbdu1>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xe8,%rsp
  movsd  (%rdi),%xmm1
  movq   D19(%rip),%xmm2
  mov    %rdx,0x28(%rsp)
  mov    %r8,0x98(%rsp)
  andpd  %xmm2,%xmm1
  mov    %r9d,0xc(%rsp)
  cmp    $0x1,%r9d
  jle    L392
  mov    %rsi,%r15
  mov    %ecx,%r10d
  movslq %r9d,%rdx
  mov    $0x1,%eax
  mov    %r9d,0xd0(%rsp)
  nopw   0x0(%rax,%rax,1)
L384:
  movsd  -0x8(%r15,%rax,8),%xmm0
  movsd  (%rdi,%rax,8),%xmm3
  add    $0x1,%rax
  andpd  %xmm2,%xmm0
  andpd  %xmm2,%xmm3
  addsd  %xmm3,%xmm0
  maxsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  cmp    %rdx,%rax
  jne    L384
  lea    0x0(,%rax,8),%r11
  shl    $0x4,%rax
  movl   $0x0,0x20(%rsp)
  movq   D145(%rip),%xmm4
  mov    %rax,%r9
  mov    %r10d,%eax
  pxor   %xmm3,%xmm3
  mov    %r11,%rbp
  imul   $0x64,0xc(%rsp),%esi
  and    $0xfffffffe,%eax
  mov    %r15,%r8
  mov    %eax,0x54(%rsp)
  imul   %r11,%rax
  mulsd  D79(%rip),%xmm1
  mov    %esi,0x88(%rsp)
  mov    %r10d,%esi
  mov    %rax,0x80(%rsp)
  shr    %esi
  lea    0xf(%r11),%rax
  mov    %esi,0x8c(%rsp)
  mov    %rax,0x90(%rsp)
  nopl   0x0(%rax)
L48:
  mov    0xc(%rsp),%eax
  sub    $0x1,%eax
  movslq %eax,%r12
  mov    %eax,0x24(%rsp)
  lea    0x0(,%r12,8),%rax
  mov    %rax,0x38(%rsp)
  mov    %rax,%r15
  cs nopw 0x0(%rax,%rax,1)
L214:
  mov    %r15,%rbx
  mov    %r12d,%r11d
  lea    -0x8(%r15),%r15
  movsd  -0x8(%r8,%rbx,1),%xmm0
  andpd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  ja     L320
  movsd  -0x8(%rdi,%rbx,1),%xmm0
  andpd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  ja     L219
  sub    $0x1,%r12
  jne    L214
  mov    %r8,0x48(%rsp)
  xor    %ebx,%ebx
  xor    %r11d,%r11d
  mov    %rdi,0x40(%rsp)
  movl   $0x1,0x50(%rsp)
L244:
  mov    0x40(%rsp),%rax
  movsd  (%rax),%xmm9
  mov    0x38(%rsp),%rax
  lea    (%rdi,%rax,1),%r15
  lea    -0x8(%r8,%rax,1),%r14
  mov    0x48(%rsp),%rax
  movapd %xmm9,%xmm7
  movsd  (%r15),%xmm11
  movapd %xmm9,%xmm5
  movsd  (%r14),%xmm0
  movsd  (%rax),%xmm10
  subsd  %xmm11,%xmm5
  addsd  %xmm11,%xmm7
  mulsd  %xmm0,%xmm0
  movapd %xmm10,%xmm6
  mulsd  %xmm9,%xmm6
  mulsd  %xmm5,%xmm7
  movapd %xmm6,%xmm5
  subsd  %xmm0,%xmm7
  addsd  %xmm6,%xmm5
  mulsd  %xmm5,%xmm5
  movapd %xmm7,%xmm0
  mulsd  %xmm7,%xmm0
  addsd  %xmm0,%xmm5
  ucomisd %xmm5,%xmm3
  ja     L23
  sqrtsd %xmm5,%xmm5
L122:
  comisd %xmm3,%xmm5
  ja     L163
L105:
  movsd  %xmm11,(%r14)
  andpd  %xmm2,%xmm11
  mov    0x24(%rsp),%esi
  ucomisd %xmm11,%xmm1
  cmovbe 0xc(%rsp),%esi
  xor    %eax,%eax
  cmp    0x50(%rsp),%esi
  sete   %al
  movsd  %xmm9,(%r15)
  sub    %eax,%esi
  addl   $0x1,0x20(%rsp)
  mov    %esi,%eax
  mov    %esi,0xc(%rsp)
  mov    0x20(%rsp),%esi
  cmp    $0x1,%eax
  jle    L50
  cmp    %esi,0x88(%rsp)
  jg     L48
L50:
  mov    0x20(%rsp),%eax
  add    $0xe8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L320:
  lea    (%rdi,%rbx,1),%rax
  mov    %rax,0x40(%rsp)
  lea    (%r8,%rbx,1),%rax
  mov    %rax,0x48(%rsp)
  lea    0x1(%r12),%eax
  mov    %eax,0x50(%rsp)
  jmp    L244
  nopl   0x0(%rax,%rax,1)
L219:
  lea    (%rdi,%rbx,1),%rax
  mov    %rax,0x40(%rsp)
  lea    (%r8,%rbx,1),%rax
  mov    %rax,0x48(%rsp)
  lea    0x1(%r12),%eax
  mov    %eax,0x50(%rsp)
  cmp    0xc(%rsp),%r12d
  jge    L244
  mov    0x28(%rsp),%rax
  mov    0x24(%rsp),%edx
  mov    %rbx,0x68(%rsp)
  movapd %xmm3,%xmm7
  mov    0x90(%rsp),%r11
  mov    %r12,0x58(%rsp)
  lea    (%rax,%r15,1),%rsi
  movslq %r12d,%rax
  sub    %r12d,%edx
  mov    %r12d,0x60(%rsp)
  mov    %rsi,0x10(%rsp)
  add    0x80(%rsp),%rsi
  sub    %r12,%rax
  mov    %rsi,%r13
  add    %rax,%rdx
  lea    (%rbx,%rax,8),%r14
  mov    %rdi,0x70(%rsp)
  mov    D89(%rip),%rsi
  lea    0x8(%rbx,%rdx,8),%rcx
  mov    %r8,0x78(%rsp)
  lea    0x0(,%r12,8),%rax
  sub    %r15,%rax
  mov    0x8c(%rsp),%ebx
  movq   %rsi,%xmm6
  lea    0x7(%r15,%rbp,1),%rsi
  lea    (%r8,%rax,1),%rdx
  add    %rdi,%rax
  mov    %rsi,0x18(%rsp)
  lea    -0x1(%r10),%esi
  mov    %rdx,%r12
  mov    %rax,%rdi
  mov    %esi,0x30(%rsp)
  mov    %rcx,%r8
  nopl   (%rax)
L213:
  movsd  -0x10(%r12,%r14,1),%xmm0
  movsd  -0x8(%rdi,%r14,1),%xmm5
  mulsd  %xmm0,%xmm6
  mulsd  %xmm7,%xmm0
  movapd %xmm5,%xmm7
  mulsd  %xmm5,%xmm7
  movsd  %xmm0,-0x10(%r12,%r14,1)
  movapd %xmm6,%xmm0
  mulsd  %xmm6,%xmm0
  addsd  %xmm7,%xmm0
  ucomisd %xmm0,%xmm3
  ja     L308
  sqrtsd %xmm0,%xmm0
L262:
  xorpd  %xmm4,%xmm6
  movapd %xmm5,%xmm7
  movsd  %xmm0,-0x8(%rdi,%r14,1)
  divsd  %xmm0,%xmm6
  divsd  %xmm0,%xmm7
  test   %r10d,%r10d
  jle    L408
  lea    -0x8(%r14,%r11,1),%rax
  mov    %r14,%rcx
  sub    %r15,%rcx
  cmp    %rax,%r15
  setg   %dl
  cmp    0x18(%rsp),%r14
  setg   %al
  or     %dl,%al
  je     L97
  cmpl   $0xc,0x30(%rsp)
  jbe    L97
  mov    0x28(%rsp),%rax
  movapd %xmm7,%xmm10
  movapd %xmm6,%xmm9
  xor    %esi,%esi
  unpcklpd %xmm10,%xmm10
  unpcklpd %xmm9,%xmm9
  lea    (%rax,%r14,1),%rdx
  mov    0x10(%rsp),%rax
  nop
L243:
  movsd  (%rax),%xmm5
  movsd  (%rdx),%xmm0
  movapd %xmm9,%xmm8
  add    $0x1,%esi
  movapd %xmm10,%xmm11
  movhpd (%rax,%rbp,1),%xmm5
  movhpd (%rdx,%rbp,1),%xmm0
  mulpd  %xmm0,%xmm8
  mulpd  %xmm5,%xmm11
  mulpd  %xmm10,%xmm0
  mulpd  %xmm9,%xmm5
  addpd  %xmm11,%xmm8
  subpd  %xmm5,%xmm0
  movlpd %xmm0,(%rdx)
  movhpd %xmm0,(%rdx,%rbp,1)
  add    %r9,%rdx
  movlpd %xmm8,(%rax)
  movhpd %xmm8,(%rax,%rbp,1)
  add    %r9,%rax
  cmp    %esi,%ebx
  jne    L243
  cmp    %r10d,0x54(%rsp)
  je     L408
  add    %r13,%rcx
  movsd  0x0(%r13),%xmm5
  movapd %xmm7,%xmm8
  movapd %xmm6,%xmm9
  movsd  (%rcx),%xmm0
  mulsd  %xmm5,%xmm9
  mulsd  %xmm0,%xmm8
  mulsd  %xmm7,%xmm5
  mulsd  %xmm6,%xmm0
  subsd  %xmm9,%xmm8
  addsd  %xmm5,%xmm0
  movsd  %xmm8,(%rcx)
  movsd  %xmm0,0x0(%r13)
L408:
  add    $0x8,%r14
  cmp    %r8,%r14
  jne    L213
  mov    0x58(%rsp),%r12
  mov    0x60(%rsp),%r11d
  mov    0x68(%rsp),%rbx
  mov    0x70(%rsp),%rdi
  mov    0x78(%rsp),%r8
  jmp    L244
  nopl   0x0(%rax)
L97:
  mov    0x10(%rsp),%rax
  xor    %edx,%edx
  nopw   0x0(%rax,%rax,1)
L336:
  movsd  (%rax),%xmm5
  movsd  (%rax,%rcx,1),%xmm0
  movapd %xmm7,%xmm8
  add    $0x1,%edx
  movapd %xmm6,%xmm9
  mulsd  %xmm0,%xmm8
  mulsd  %xmm5,%xmm9
  mulsd  %xmm6,%xmm0
  mulsd  %xmm7,%xmm5
  subsd  %xmm9,%xmm8
  addsd  %xmm5,%xmm0
  movsd  %xmm8,(%rax,%rcx,1)
  movsd  %xmm0,(%rax)
  add    %rbp,%rax
  cmp    %edx,%r10d
  jne    L336
  jmp    L408
L163:
  movapd %xmm5,%xmm0
  addsd  %xmm5,%xmm7
  addsd  %xmm5,%xmm0
  divsd  %xmm0,%xmm7
  ucomisd %xmm7,%xmm3
  ja     L135
  sqrtsd %xmm7,%xmm7
L58:
  ucomisd %xmm3,%xmm7
  jp     L340
  movsd  D89(%rip),%xmm8
  je     L47
L340:
  mulsd  %xmm7,%xmm5
  divsd  %xmm5,%xmm6
  movapd %xmm6,%xmm8
L47:
  mov    0x24(%rsp),%esi
  cmp    %esi,%r11d
  jge    L105
  mov    %r15,0x10(%rsp)
  lea    0x1(%r11),%r13d
  mov    0xd0(%rsp),%r15d
  mov    %r9,0x18(%rsp)
  mov    0x98(%rsp),%rcx
  movslq %r13d,%r13
  mov    0x28(%rsp),%r9
  nopw   0x0(%rax,%rax,1)
L276:
  movapd %xmm10,%xmm0
  movapd %xmm7,%xmm11
  lea    (%rcx,%rbx,1),%rax
  xor    %edx,%edx
  mulsd  %xmm9,%xmm11
  movapd %xmm7,%xmm12
  mulsd  %xmm8,%xmm0
  unpcklpd %xmm12,%xmm12
  mulsd  %xmm8,%xmm9
  mulsd  %xmm7,%xmm10
  addsd  %xmm0,%xmm11
  subsd  %xmm9,%xmm10
  movapd %xmm8,%xmm9
  unpcklpd %xmm9,%xmm9
  nopw   0x0(%rax,%rax,1)
L245:
  movupd (%rax),%xmm0
  movupd (%rax),%xmm5
  add    $0x1,%edx
  mulpd  %xmm9,%xmm0
  mulpd  %xmm12,%xmm5
  shufpd $0x1,%xmm0,%xmm0
  movapd %xmm0,%xmm6
  addpd  %xmm5,%xmm6
  subpd  %xmm0,%xmm5
  movsd  %xmm6,%xmm5
  movups %xmm5,(%rax)
  add    %rbp,%rax
  cmp    %edx,%r15d
  jne    L245
  lea    0x8(%rdi,%r12,8),%r12
  movapd %xmm11,%xmm0
  mulsd  (%r12),%xmm8
  mulsd  %xmm11,%xmm0
  movapd %xmm8,%xmm5
  mulsd  %xmm8,%xmm5
  addsd  %xmm5,%xmm0
  ucomisd %xmm0,%xmm3
  ja     L273
  sqrtsd %xmm0,%xmm0
L294:
  movsd  %xmm0,(%rdi,%rbx,1)
  mulsd  (%r12),%xmm7
  divsd  %xmm0,%xmm8
  movapd %xmm7,%xmm9
  movapd %xmm11,%xmm7
  movapd %xmm10,%xmm11
  divsd  %xmm0,%xmm7
  movapd %xmm9,%xmm0
  mulsd  %xmm8,%xmm0
  mulsd  %xmm8,%xmm10
  mulsd  %xmm7,%xmm11
  mulsd  %xmm7,%xmm9
  addsd  %xmm0,%xmm11
  subsd  %xmm10,%xmm9
  test   %r10d,%r10d
  jle    L6
  movapd %xmm7,%xmm12
  movapd %xmm8,%xmm10
  add    %r9,%rbx
  xor    %eax,%eax
  unpcklpd %xmm12,%xmm12
  unpcklpd %xmm10,%xmm10
  nopw   0x0(%rax,%rax,1)
L310:
  movupd (%rbx),%xmm0
  movupd (%rbx),%xmm5
  add    $0x1,%eax
  mulpd  %xmm10,%xmm0
  mulpd  %xmm12,%xmm5
  shufpd $0x1,%xmm0,%xmm0
  movapd %xmm0,%xmm6
  addpd  %xmm5,%xmm6
  subpd  %xmm0,%xmm5
  movsd  %xmm6,%xmm5
  movups %xmm5,(%rbx)
  add    %rbp,%rbx
  cmp    %r10d,%eax
  jne    L310
L6:
  cmp    %r13d,%esi
  jle    L166
  movsd  (%r8,%r13,8),%xmm10
  lea    0x0(,%r13,8),%rbx
  cmp    %r13d,%r11d
  jl     L185
L279:
  mov    %r13,%r12
  add    $0x1,%r13
  jmp    L276
  nopl   0x0(%rax)
L185:
  mulsd  %xmm10,%xmm8
  movapd %xmm11,%xmm0
  mulsd  %xmm11,%xmm0
  movapd %xmm8,%xmm5
  mulsd  %xmm8,%xmm5
  addsd  %xmm5,%xmm0
  ucomisd %xmm0,%xmm3
  ja     L115
  sqrtsd %xmm0,%xmm0
L284:
  mulsd  %xmm7,%xmm10
  movapd %xmm11,%xmm7
  movsd  %xmm0,-0x8(%r8,%r13,8)
  divsd  %xmm0,%xmm7
  divsd  %xmm0,%xmm8
  jmp    L279
L166:
  mov    0x10(%rsp),%r15
  mov    0x18(%rsp),%r9
  jmp    L105
L392:
  movl   $0x0,0x20(%rsp)
  jmp    L50
L308:
  mov    %r11,0xd8(%rsp)
  mov    %r10d,0xd4(%rsp)
  mov    %r8,0xc8(%rsp)
  mov    %rdi,0xc0(%rsp)
  mov    %r9,0xb8(%rsp)
  movsd  %xmm1,0xb0(%rsp)
  movsd  %xmm5,0xa8(%rsp)
  movsd  %xmm6,0xa0(%rsp)
  call   <sqrt@plt>
  mov    0xd8(%rsp),%r11
  mov    0xd4(%rsp),%r10d
  pxor   %xmm3,%xmm3
  mov    0xc8(%rsp),%r8
  mov    0xc0(%rsp),%rdi
  mov    0xb8(%rsp),%r9
  movq   D145(%rip),%xmm4
  movsd  0xb0(%rsp),%xmm1
  movq   D19(%rip),%xmm2
  movsd  0xa8(%rsp),%xmm5
  movsd  0xa0(%rsp),%xmm6
  jmp    L262
L23:
  movapd %xmm5,%xmm0
  mov    %r10d,0x78(%rsp)
  mov    %r8,0x70(%rsp)
  mov    %rdi,0x68(%rsp)
  mov    %r9,0x60(%rsp)
  mov    %r11d,0x10(%rsp)
  movsd  %xmm1,0x58(%rsp)
  movsd  %xmm6,0x48(%rsp)
  movsd  %xmm7,0x40(%rsp)
  movsd  %xmm9,0x38(%rsp)
  movsd  %xmm11,0x30(%rsp)
  movsd  %xmm10,0x18(%rsp)
  call   <sqrt@plt>
  mov    0x78(%rsp),%r10d
  mov    0x70(%rsp),%r8
  pxor   %xmm3,%xmm3
  mov    0x68(%rsp),%rdi
  mov    0x60(%rsp),%r9
  movapd %xmm0,%xmm5
  movsd  0x58(%rsp),%xmm1
  movq   D145(%rip),%xmm4
  movq   D19(%rip),%xmm2
  movsd  0x48(%rsp),%xmm6
  movsd  0x40(%rsp),%xmm7
  movsd  0x38(%rsp),%xmm9
  movsd  0x30(%rsp),%xmm11
  movsd  0x18(%rsp),%xmm10
  mov    0x10(%rsp),%r11d
  jmp    L122
L273:
  mov    %esi,0xb0(%rsp)
  mov    %rcx,0xa8(%rsp)
  mov    %r10d,0xa0(%rsp)
  mov    %r9,0x78(%rsp)
  mov    %r8,0x70(%rsp)
  mov    %rdi,0x68(%rsp)
  mov    %r11d,0x58(%rsp)
  movsd  %xmm1,0x60(%rsp)
  movsd  %xmm7,0x48(%rsp)
  movsd  %xmm8,0x40(%rsp)
  movsd  %xmm10,0x38(%rsp)
  movsd  %xmm11,0x30(%rsp)
  call   <sqrt@plt>
  mov    0xb0(%rsp),%esi
  mov    0x78(%rsp),%r9
  pxor   %xmm3,%xmm3
  mov    0xa8(%rsp),%rcx
  mov    0xa0(%rsp),%r10d
  mov    0x70(%rsp),%r8
  mov    0x68(%rsp),%rdi
  movsd  0x60(%rsp),%xmm1
  mov    0x58(%rsp),%r11d
  movq   D145(%rip),%xmm4
  movq   D19(%rip),%xmm2
  movsd  0x48(%rsp),%xmm7
  movsd  0x40(%rsp),%xmm8
  movsd  0x38(%rsp),%xmm10
  movsd  0x30(%rsp),%xmm11
  jmp    L294
L115:
  mov    %esi,0xb8(%rsp)
  mov    %rcx,0xb0(%rsp)
  mov    %r10d,0xa8(%rsp)
  mov    %r9,0xa0(%rsp)
  mov    %r8,0x78(%rsp)
  mov    %rdi,0x70(%rsp)
  mov    %r11d,0x60(%rsp)
  movsd  %xmm1,0x68(%rsp)
  movsd  %xmm8,0x58(%rsp)
  movsd  %xmm7,0x48(%rsp)
  movsd  %xmm9,0x40(%rsp)
  movsd  %xmm11,0x38(%rsp)
  movsd  %xmm10,0x30(%rsp)
  call   <sqrt@plt>
  mov    0xb8(%rsp),%esi
  mov    0xb0(%rsp),%rcx
  pxor   %xmm3,%xmm3
  mov    0xa8(%rsp),%r10d
  mov    0xa0(%rsp),%r9
  mov    0x78(%rsp),%r8
  mov    0x70(%rsp),%rdi
  movsd  0x68(%rsp),%xmm1
  mov    0x60(%rsp),%r11d
  movq   D145(%rip),%xmm4
  movq   D19(%rip),%xmm2
  movsd  0x58(%rsp),%xmm8
  movsd  0x48(%rsp),%xmm7
  movsd  0x40(%rsp),%xmm9
  movsd  0x38(%rsp),%xmm11
  movsd  0x30(%rsp),%xmm10
  jmp    L284
L135:
  movapd %xmm7,%xmm0
  mov    %r10d,0x78(%rsp)
  mov    %r8,0x70(%rsp)
  mov    %rdi,0x68(%rsp)
  mov    %r9,0x60(%rsp)
  mov    %r11d,0x10(%rsp)
  movsd  %xmm1,0x58(%rsp)
  movsd  %xmm5,0x48(%rsp)
  movsd  %xmm6,0x40(%rsp)
  movsd  %xmm9,0x38(%rsp)
  movsd  %xmm11,0x30(%rsp)
  movsd  %xmm10,0x18(%rsp)
  call   <sqrt@plt>
  mov    0x78(%rsp),%r10d
  mov    0x70(%rsp),%r8
  pxor   %xmm3,%xmm3
  mov    0x68(%rsp),%rdi
  mov    0x60(%rsp),%r9
  movapd %xmm0,%xmm7
  movsd  0x58(%rsp),%xmm1
  movq   D145(%rip),%xmm4
  movq   D19(%rip),%xmm2
  movsd  0x48(%rsp),%xmm5
  movsd  0x40(%rsp),%xmm6
  movsd  0x38(%rsp),%xmm9
  movsd  0x30(%rsp),%xmm11
  movsd  0x18(%rsp),%xmm10
  mov    0x10(%rsp),%r11d
  jmp    L58
```

tool_calls: name: retrieve_data
arguments: data_tag: D19
type: qword
name: retrieve_data
arguments: data_tag: D145
type: f32[2]
name: retrieve_data
arguments: data_tag: D79
type: byte[8]
name: retrieve_data
arguments: data_tag: D89
type: f64

tool: D19: 9223372036854775807

tool: {"D145": [0.0,-0.0]}

tool: {"D79": [0x16,0x56,0xe7,0x9e,0xaf,0x03,0xd2,0x3c]}

tool: D89: 1

assistant: ```c
int qrbdu1(double *dm, double *em, double *um, int mm, double *vm, int m) {
  int i, j, k, n, jj, nm;
  double u, x, y, a, b, c, s, t, w, *p, *q;
  for (j = 1, t = fabs(dm[0]); j < m; ++j)
    if ((s = fabs(dm[j]) + fabs(em[j - 1])) > t)
      t = s;
  t *= 1.e-15;
  n = 100 * m;
  nm = m;
  for (j = 0; m > 1 && j < n; ++j) {
    for (k = m - 1; k > 0; --k) {
      if (fabs(em[k - 1]) < t)
        break;
      if (fabs(dm[k - 1]) < t) {
        for (i = k, s = 1., c = 0.; i < m; ++i) {
          a = s * em[i - 1];
          b = dm[i];
          em[i - 1] *= c;
          dm[i] = u = sqrt(a * a + b * b);
          s = -a / u;
          c = b / u;
          for (jj = 0, p = um + k - 1; jj < mm; ++jj, p += nm) {
            q = p + i - k + 1;
            w = c * *p + s * *q;
            *q = c * *q - s * *p;
            *p = w;
          }
        }
        break;
      }
    }
    y = dm[k];
    x = dm[m - 1];
    u = em[m - 2];
    a = (y + x) * (y - x) - u * u;
    s = y * em[k];
    b = s + s;
    u = sqrt(a * a + b * b);
    if (u > 0.) {
      c = sqrt((u + a) / (u + u));
      if (c != 0.)
        s /= (c * u);
      else
        s = 1.;
      for (i = k; i < m - 1; ++i) {
        b = em[i];
        if (i > k) {
          a = s * em[i];
          b *= c;
          em[i - 1] = u = sqrt(x * x + a * a);
          c = x / u;
          s = a / u;
        }
        a = c * y + s * b;
        b = c * b - s * y;
        for (jj = 0, p = vm + i; jj < nm; ++jj, p += nm) {
          w = c * *p + s * *(p + 1);
          *(p + 1) = c * *(p + 1) - s * *p;
          *p = w;
        }
        s *= dm[i + 1];
        dm[i] = u = sqrt(a * a + s * s);
        y = c * dm[i + 1];
        c = a / u;
        s /= u;
        x = c * b + s * y;
        y = c * y - s * b;
        for (jj = 0, p = um + i; jj < mm; ++jj, p += nm) {
          w = c * *p + s * *(p + 1);
          *(p + 1) = c * *(p + 1) - s * *p;
          *p = w;
        }
      }
    }
    em[m - 2] = x;
    dm[m - 1] = y;
    if (fabs(x) < t)
      --m;
    if (m == k + 1)
      --m;
  }
  return j;
}
```