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

```asm
<calc_ind_rating>:
  endbr64
  push   %r15
  movq   %xmm1,%r15
  push   %r14
  xor    %r14d,%r14d
  push   %r13
  mov    $0x13,%r13d
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x48,%rsp
  mov    D12(%rip),%rax
  movsd  %xmm0,0x18(%rsp)
  movq   %rax,%xmm0
  call   <ind_expected@plt>
  movsd  D15(%rip),%xmm7
  mov    D95(%rip),%rax
  movapd %xmm0,%xmm1
  movsd  0x18(%rsp),%xmm0
  mov    %rax,0x8(%rsp)
  mov    D12(%rip),%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm7,0x30(%rsp)
  movsd  D36(%rip),%xmm7
  movq   %rax,%xmm5
  movsd  %xmm7,0x38(%rsp)
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,0x10(%rsp)
  jmp    L63
  xchg   %ax,%ax
L16:
  movsd  D39(%rip),%xmm3
  movsd  0x28(%rsp),%xmm2
  comisd %xmm0,%xmm3
  ja     L22
  movsd  D42(%rip),%xmm3
  mulsd  0x8(%rsp),%xmm3
  add    $0x1,%r14d
  movsd  %xmm3,0x8(%rsp)
  cmp    $0x2710,%r14d
  je     L50
L52:
  movapd %xmm2,%xmm5
  movsd  %xmm0,0x10(%rsp)
L63:
  mov    %r12d,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  movsd  %xmm5,0x20(%rsp)
  movq   %r15,%xmm1
  movapd %xmm5,%xmm0
  call   <ind_expected@plt>
  movsd  0x30(%rsp),%xmm4
  mulsd  0x8(%rsp),%xmm4
  movsd  0x20(%rsp),%xmm5
  movsd  0x38(%rsp),%xmm3
  movapd %xmm0,%xmm1
  movsd  0x18(%rsp),%xmm2
  movapd %xmm5,%xmm0
  call   <adjust_x@plt>
  movq   %r15,%xmm1
  mov    %r12d,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  movsd  %xmm0,0x28(%rsp)
  call   <ind_expected@plt>
  subsd  0x18(%rsp),%xmm0
  movsd  0x20(%rsp),%xmm5
  mulsd  %xmm0,%xmm0
  comisd 0x10(%rsp),%xmm0
  jb     L16
  movsd  0x10(%rsp),%xmm0
  movapd %xmm5,%xmm2
L50:
  movsd  D97(%rip),%xmm6
  mulsd  0x38(%rsp),%xmm6
  movsd  0x30(%rsp),%xmm4
  movapd %xmm4,%xmm7
  addsd  %xmm4,%xmm7
  movsd  %xmm6,0x38(%rsp)
  movsd  D39(%rip),%xmm6
  comisd %xmm0,%xmm6
  movsd  %xmm7,0x30(%rsp)
  ja     L22
  lea    -0x1(%r13),%eax
  test   %r13d,%r13d
  je     L22
  mov    %eax,%r13d
  mov    D95(%rip),%rax
  xor    %r14d,%r14d
  mov    %rax,0x8(%rsp)
  jmp    L52
  nopl   0x0(%rax)
L22:
  add    $0x48,%rsp
  movapd %xmm2,%xmm0
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: tag: D12
type_infered: f64
name: read_data
arguments: tag: D15
type_infered: f64
name: read_data
arguments: tag: D95
type_infered: f64
name: read_data
arguments: tag: D36
type_infered: f64
name: read_data
arguments: tag: D39
type_infered: f64
name: read_data
arguments: tag: D42
type_infered: f64
name: read_data
arguments: tag: D97
type_infered: byte[8]

tool: D12: 2000

tool: D15: 0.05

tool: D95: 1

tool: D36: 200

tool: D39: 1e-06

tool: D42: 0.995

tool: {"D97": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

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;
}
```