user: 请将以下的汇编代码转换成C语言代码:

```asm
<c_corr_prune>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x58(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x10(%rbp)
  cmpq   $0x0,-0x10(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
L74:
  mov    -0x10(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x1,%edx
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <fread@plt>
  cmp    $0x1,%eax
  jne    L26
  mov    -0x10(%rbp),%rdx
  lea    -0x48(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x1,%edx
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <fread@plt>
  cmp    $0x1,%eax
  jne    L26
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %rax,%rax
  je     L84
L26:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    -0x18(%rbp),%rax
  test   %rax,%rax
  js     L43
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L40
L43:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L40:
  mulsd  -0x20(%rbp),%xmm0
  movsd  -0x40(%rbp),%xmm1
  mulsd  -0x30(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0x18(%rbp),%rax
  test   %rax,%rax
  js     L119
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L5
L119:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L5:
  movapd %xmm0,%xmm1
  mulsd  -0x38(%rbp),%xmm1
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  comisd D13(%rip),%xmm0
  jae    L89
  cvttsd2si %xmm0,%rax
  jmp    L48
L89:
  movsd  D13(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%rax
  movabs $0x8000000000000000,%rdx
  xor    %rdx,%rax
L48:
  mov    %rax,%rdi
  call   <sqrt@plt>
  test   %rax,%rax
  js     L50
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L33
L50:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L33:
  movsd  -0x60(%rbp),%xmm3
  divsd  %xmm0,%xmm3
  movsd  %xmm3,-0x60(%rbp)
  mov    -0x18(%rbp),%rax
  test   %rax,%rax
  js     L128
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L90
L128:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L90:
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  comisd D13(%rip),%xmm0
  jae    L181
  cvttsd2si %xmm0,%rax
  jmp    L229
L181:
  movsd  D13(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%rax
  movabs $0x8000000000000000,%rdx
  xor    %rdx,%rax
L229:
  mov    %rax,%rdi
  call   <sqrt@plt>
  test   %rax,%rax
  js     L100
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L146
L100:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L146:
  movsd  -0x60(%rbp),%xmm1
  divsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L129
  jmp    L114
L84:
  movsd  -0x50(%rbp),%xmm0
  comisd D51(%rip),%xmm0
  jae    L180
  movsd  -0x48(%rbp),%xmm0
  comisd D51(%rip),%xmm0
  jae    L180
  movsd  -0x50(%rbp),%xmm0
  movsd  -0x40(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x50(%rbp),%xmm1
  movsd  -0x50(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x38(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x50(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  addq   $0x1,-0x18(%rbp)
  jmp    L74
L180:
  nop
  jmp    L74
L114:
  call   <__stack_chk_fail@plt>
L129:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D37
type_guessed: string
name: parse_data
arguments: label: D13
type_guessed: f32[4]
name: parse_data
arguments: label: D51
type_guessed: f64

tool: D37: rb

tool: {"D13": [0.0,448.0,0.0,1.625]}

tool: D51: 0.25

assistant: ```c
double c_corr_prune(const char f_name[]) {
  FILE *const pf = fopen(f_name, "rb");
  assert(pf != NULL);
  double sx = 0, sxx = 0, sy = 0, syy = 0, sxy = 0;
  size_t n = 0;
  while (1) {
    double x, y;
    if (fread(&x, sizeof(double), 1, pf) != 1 || fread(&y, sizeof(double), 1, pf) != 1 || feof(pf)) {
      fclose(pf);
      break;
    }
    if (x >= 0.25 || y >= 0.25)
      continue;
    sx += x;
    sxx += x * x;
    sy += y;
    sxy += x * y;
    syy += y * y;
    ++n;
  }
  return (n * sxy - sx * sy) / sqrt(n * sxx - sx * sx) / sqrt(n * syy - sy * sy);
}
```