user: 请从给定的汇编指令推导出C源代码:

```asm
<rootfind>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  movss  %xmm0,-0x2c(%rbp)
  movss  %xmm1,-0x30(%rbp)
  movss  %xmm2,-0x34(%rbp)
  movss  %xmm3,-0x38(%rbp)
  movss  -0x30(%rbp),%xmm0
  movss  D73(%rip),%xmm1
  movaps %xmm0,%xmm2
  divss  %xmm1,%xmm2
  movss  -0x2c(%rbp),%xmm0
  movss  D73(%rip),%xmm1
  divss  %xmm1,%xmm0
  movd   %xmm0,%eax
  mov    -0x28(%rbp),%rdx
  movaps %xmm2,%xmm1
  movd   %eax,%xmm0
  call   *%rdx
  cvtss2sd %xmm0,%xmm0
  movsd  D8(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x34(%rbp),%xmm0
  movss  D73(%rip),%xmm1
  movaps %xmm0,%xmm2
  divss  %xmm1,%xmm2
  movss  -0x2c(%rbp),%xmm0
  movss  D73(%rip),%xmm1
  divss  %xmm1,%xmm0
  movd   %xmm0,%eax
  mov    -0x28(%rbp),%rdx
  movaps %xmm2,%xmm1
  movd   %eax,%xmm0
  call   *%rdx
  cvtss2sd %xmm0,%xmm0
  movsd  D8(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0xc(%rbp),%xmm0
  mulss  -0x8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jb     L23
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  call   <nrerror@plt>
L23:
  pxor   %xmm0,%xmm0
  comiss -0xc(%rbp),%xmm0
  jbe    L2
  movss  -0x34(%rbp),%xmm0
  subss  -0x30(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x30(%rbp),%xmm0
  jmp    L83
L2:
  movss  -0x30(%rbp),%xmm0
  subss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x34(%rbp),%xmm0
L83:
  movss  %xmm0,-0x10(%rbp)
  movl   $0x1,-0x18(%rbp)
  jmp    L77
L11:
  movss  -0x14(%rbp),%xmm1
  movss  D34(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x14(%rbp),%xmm0
  addss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0x4(%rbp)
  pxor   %xmm0,%xmm0
  cvtss2sd -0x4(%rbp),%xmm0
  movsd  D7(%rip),%xmm1
  divsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsd2ss %xmm0,%xmm2
  movss  -0x2c(%rbp),%xmm0
  movss  D73(%rip),%xmm1
  divss  %xmm1,%xmm0
  movd   %xmm0,%eax
  mov    -0x28(%rbp),%rdx
  movaps %xmm2,%xmm1
  movd   %eax,%xmm0
  call   *%rdx
  cvtss2sd %xmm0,%xmm0
  movsd  D8(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0x8(%rbp),%xmm0
  jb     L85
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
L85:
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  movss  -0x38(%rbp),%xmm1
  comiss %xmm0,%xmm1
  ja     L29
  pxor   %xmm0,%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jp     L61
  pxor   %xmm0,%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jne    L61
L29:
  movss  -0x10(%rbp),%xmm0
  jmp    L80
L61:
  addl   $0x1,-0x18(%rbp)
L77:
  cmpl   $0x28,-0x18(%rbp)
  jle    L11
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  call   <nrerror@plt>
  pxor   %xmm0,%xmm0
L80:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D73
type_infered: f32
name: disassemble_data
arguments: data_tag: D8
type_infered: f64
name: disassemble_data
arguments: data_tag: D55
type_infered: string
name: disassemble_data
arguments: data_tag: D34
type_infered: f32
name: disassemble_data
arguments: data_tag: D7
type_infered: f32[2]
name: disassemble_data
arguments: data_tag: D75
type_infered: string

tool: D73: 2

tool: D8: 0.6827

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

tool: D34: 0.5

tool: {"D7": [0.0,2.0]}

tool: D75: Too many bisections 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;
}
```