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

```asm
<rootfind>:
  endbr64
  push   %r14
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  mov    %rdi,%rbp
  movss  %xmm1,0x14(%rsp)
  movss  %xmm2,0x10(%rsp)
  movss  %xmm3,0x1c(%rsp)
  mulss  D99(%rip),%xmm0
  movd   %xmm0,%r14d
  movss  D99(%rip),%xmm6
  mulss  %xmm1,%xmm6
  movaps %xmm6,%xmm1
  call   *%rdi
  cvtss2sd %xmm0,%xmm0
  subsd  D12(%rip),%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movss  %xmm6,0xc(%rsp)
  movss  D99(%rip),%xmm1
  mulss  0x10(%rsp),%xmm1
  movd   %r14d,%xmm0
  call   *%rbp
  cvtss2sd %xmm0,%xmm0
  subsd  D12(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  mulss  0xc(%rsp),%xmm0
  comiss D118(%rip),%xmm0
  jae    L46
L60:
  pxor   %xmm0,%xmm0
  comiss 0xc(%rsp),%xmm0
  ja     L44
  movss  0x14(%rsp),%xmm6
  movss  0x10(%rsp),%xmm5
  subss  %xmm5,%xmm6
  movss  %xmm6,0x10(%rsp)
  movss  %xmm5,0xc(%rsp)
L73:
  mov    $0x28,%ebx
L12:
  movss  D99(%rip),%xmm4
  mulss  0x10(%rsp),%xmm4
  movss  %xmm4,0x10(%rsp)
  movaps %xmm4,%xmm5
  addss  0xc(%rsp),%xmm5
  movss  D99(%rip),%xmm3
  movss  %xmm5,0x14(%rsp)
  mulss  %xmm5,%xmm3
  movaps %xmm3,%xmm1
  movd   %r14d,%xmm0
  call   *%rbp
  cvtss2sd %xmm0,%xmm0
  subsd  D12(%rip),%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movaps %xmm6,%xmm7
  movss  %xmm6,0x18(%rsp)
  pxor   %xmm3,%xmm3
  cmpnless %xmm3,%xmm7
  movaps %xmm7,%xmm0
  movss  0xc(%rsp),%xmm1
  andps  %xmm7,%xmm1
  movss  0x14(%rsp),%xmm4
  andnps %xmm4,%xmm0
  movaps %xmm0,%xmm2
  orps   %xmm1,%xmm2
  movss  %xmm2,0xc(%rsp)
  movss  0x10(%rsp),%xmm0
  call   <fabs@plt>
  movss  0x1c(%rsp),%xmm5
  comiss %xmm0,%xmm5
  ja     L70
  movss  0x18(%rsp),%xmm7
  ucomiss D118(%rip),%xmm7
  jp     L77
  je     L70
L77:
  sub    $0x1,%ebx
  jne    L12
  lea    D39(%rip),%rdi
  call   <nrerror@plt>
  pxor   %xmm6,%xmm6
  movss  %xmm6,0xc(%rsp)
L70:
  movss  0xc(%rsp),%xmm0
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  ret
L46:
  lea    D81(%rip),%rdi
  call   <nrerror@plt>
  jmp    L60
L44:
  movss  0x10(%rsp),%xmm6
  movss  0x14(%rsp),%xmm2
  subss  %xmm2,%xmm6
  movss  %xmm6,0x10(%rsp)
  movss  %xmm2,0xc(%rsp)
  jmp    L73
```

tool_calls: name: disassemble_data
arguments: data_tag: D99
type_infered: f32
name: disassemble_data
arguments: data_tag: D12
type_infered: f64
name: disassemble_data
arguments: data_tag: D118
type_infered: f32
name: disassemble_data
arguments: data_tag: D39
type_infered: string
name: disassemble_data
arguments: data_tag: D81
type_infered: string

tool: D99: 0.5

tool: D12: 0.6827

tool: D118: 0

tool: D39: Too many bisections in rtbis

tool: D81: Root must be bracketed for bisection in rtbis

assistant: ```c
float rootfind(float (*func)(float, float), float nu, float x1, float x2, float xacc) {
  void nrerror(char error_text[]);
  int j;
  float dx, f, fmid, xmid, rtb;
  f = (*func)(nu / 2., x1 / 2.) - 0.6827;
  fmid = (*func)(nu / 2., x2 / 2.) - 0.6827;
  if (f * fmid >= 0.0)
    nrerror("Root must be bracketed for bisection in rtbis");
  rtb = f < 0.0 ? (dx = x2 - x1, x1) : (dx = x1 - x2, x2);
  for (j = 1; j <= 40; j++) {
    fmid = (*func)(nu / 2., (xmid = rtb + (dx *= 0.5)) / 2.) - 0.6827;
    if (fmid <= 0.0)
      rtb = xmid;
    if (fabs(dx) < xacc || fmid == 0.0)
      return rtb;
  }
  nrerror("Too many bisections in rtbis");
  return 0.0;
}
```