user: 这段汇编代码用C语言表示是什么样的:

```asm
<calc_ind_rating>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  movsd  %xmm0,-0x78(%rbp)
  mov    %rdi,-0x80(%rbp)
  mov    %rsi,-0x88(%rbp)
  mov    %edx,-0x8c(%rbp)
  movsd  %xmm1,-0x98(%rbp)
  movl   $0x2710,-0x5c(%rbp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D12(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D47(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movl   $0x0,-0x64(%rbp)
  movl   $0x14,-0x60(%rbp)
  movsd  D73(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x98(%rbp),%xmm0
  mov    -0x8c(%rbp),%edx
  mov    -0x88(%rbp),%rsi
  mov    -0x80(%rbp),%rcx
  mov    -0x40(%rbp),%rax
  movapd %xmm0,%xmm1
  mov    %rcx,%rdi
  movq   %rax,%xmm0
  call   <ind_expected@plt>
  movapd %xmm0,%xmm1
  movsd  -0x78(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  jmp    L55
L43:
  movsd  D25(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movl   $0x0,-0x68(%rbp)
  jmp    L78
L95:
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x98(%rbp),%xmm0
  mov    -0x8c(%rbp),%edx
  mov    -0x88(%rbp),%rsi
  mov    -0x80(%rbp),%rcx
  mov    -0x40(%rbp),%rax
  movapd %xmm0,%xmm1
  mov    %rcx,%rdi
  movq   %rax,%xmm0
  call   <ind_expected@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm3
  mulsd  -0x38(%rbp),%xmm3
  movsd  -0x50(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <adjust_x@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  movsd  -0x98(%rbp),%xmm0
  mov    -0x8c(%rbp),%edx
  mov    -0x88(%rbp),%rsi
  mov    -0x80(%rbp),%rcx
  mov    -0x40(%rbp),%rax
  movapd %xmm0,%xmm1
  mov    %rcx,%rdi
  movq   %rax,%xmm0
  call   <ind_expected@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x58(%rbp),%xmm0
  comisd -0x20(%rbp),%xmm0
  jb     L31
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  jmp    L18
L31:
  movsd  D64(%rip),%xmm0
  comisd -0x58(%rbp),%xmm0
  ja     L97
  movsd  -0x38(%rbp),%xmm1
  movsd  D79(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x68(%rbp)
L78:
  mov    -0x68(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L95
  jmp    L18
L97:
  nop
L18:
  movsd  -0x50(%rbp),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x48(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x64(%rbp)
  movsd  D64(%rip),%xmm0
  comisd -0x58(%rbp),%xmm0
  ja     L53
L55:
  mov    -0x60(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x60(%rbp)
  test   %eax,%eax
  jg     L43
  jmp    L79
L53:
  nop
L79:
  movsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D49
datatype: f64
name: parse_data
arguments: data_tag: D12
datatype: f64
name: parse_data
arguments: data_tag: D47
datatype: f64
name: parse_data
arguments: data_tag: D73
datatype: f64
name: parse_data
arguments: data_tag: D25
datatype: f64
name: parse_data
arguments: data_tag: D64
datatype: f64
name: parse_data
arguments: data_tag: D79
datatype: f64

tool: D49: 200

tool: D12: 0.05

tool: D47: 2

tool: D73: 2000

tool: D25: 1

tool: D64: 1e-06

tool: D79: 0.995

assistant: ```c
double calc_ind_rating(double cume_score, double *rtng, double *weig, int r, double beta) {
  int i;
  double olddev, curdev;
  int rounds = 10000;
  double delta = 200.0;
  double kappa = 0.05;
  double denom = 2;
  int phase = 0;
  int n = 20;
  double D, sc, oldx;
  double x = 2000;
  double xp;
  D = cume_score - ind_expected(x, rtng, weig, r, beta);
  curdev = D * D;
  olddev = curdev;
  while (n-- > 0) {
    double kk = 1.0;
    for (i = 0; i < rounds; i++) {
      oldx = x;
      olddev = curdev;
      sc = cume_score;
      xp = ind_expected(x, rtng, weig, r, beta);
      x = adjust_x(x, xp, sc, delta, kappa * kk);
      xp = ind_expected(x, rtng, weig, r, beta);
      D = xp - sc;
      curdev = D * D;
      if (curdev >= olddev) {
        x = oldx;
        curdev = olddev;
        break;
      };
      if (curdev < 0.000001)
        break;
      kk *= 0.995;
    }
    delta /= denom;
    kappa *= denom;
    phase++;
    if (curdev < 0.000001)
      break;
  }
  return x;
}
```