user: Translate the below assembly code into C programming language:

```asm
<eight_f3>:
  endbr64
  push   %r15
  mov    %edi,%r15d
  push   %r14
  mov    %esi,%r14d
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %r8d,%r12d
  push   %rbp
  mov    %ecx,%ebp
  sub    $0x50,%rsp
  call   <probability@plt>
  mov    %r13d,%esi
  mov    %r15d,%edi
  movsd  %xmm0,0x48(%rsp)
  call   <probability@plt>
  mov    %ebp,%esi
  mov    %r15d,%edi
  movsd  %xmm0,0x40(%rsp)
  call   <probability@plt>
  mov    %r12d,%esi
  mov    %r15d,%edi
  movsd  %xmm0,0x38(%rsp)
  call   <probability@plt>
  mov    %r13d,%esi
  mov    %r14d,%edi
  movsd  %xmm0,0x30(%rsp)
  call   <probability@plt>
  mov    %ebp,%esi
  mov    %r14d,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <probability@plt>
  mov    %r12d,%esi
  mov    %r14d,%edi
  movsd  %xmm0,0x10(%rsp)
  call   <probability@plt>
  mov    %ebp,%esi
  mov    %r13d,%edi
  movsd  %xmm0,0x28(%rsp)
  call   <probability@plt>
  mov    %r12d,%esi
  mov    %r13d,%edi
  movsd  %xmm0,0x20(%rsp)
  call   <probability@plt>
  mov    %r12d,%esi
  mov    %ebp,%edi
  movsd  %xmm0,0x18(%rsp)
  call   <probability@plt>
  movsd  D0(%rip),%xmm6
  movsd  0x20(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm4
  movapd %xmm0,%xmm9
  movapd %xmm6,%xmm7
  movapd %xmm6,%xmm12
  movapd %xmm6,%xmm11
  movsd  0x48(%rsp),%xmm8
  subsd  %xmm1,%xmm7
  movapd %xmm2,%xmm15
  movapd %xmm6,%xmm13
  movsd  0x38(%rsp),%xmm3
  mulsd  %xmm0,%xmm15
  movapd %xmm6,%xmm14
  subsd  %xmm0,%xmm6
  movsd  0x10(%rsp),%xmm5
  movapd %xmm4,%xmm0
  subsd  %xmm4,%xmm13
  subsd  %xmm2,%xmm12
  movsd  0x18(%rsp),%xmm10
  mulsd  %xmm7,%xmm0
  subsd  %xmm5,%xmm11
  mulsd  %xmm1,%xmm4
  subsd  %xmm10,%xmm14
  mulsd  %xmm13,%xmm7
  addsd  %xmm15,%xmm0
  movapd %xmm8,%xmm15
  subsd  %xmm3,%xmm15
  mulsd  %xmm5,%xmm15
  addsd  %xmm3,%xmm15
  mulsd  %xmm15,%xmm0
  movapd %xmm5,%xmm15
  movsd  0x40(%rsp),%xmm5
  mulsd  %xmm10,%xmm15
  addsd  %xmm15,%xmm4
  movapd %xmm8,%xmm15
  subsd  %xmm5,%xmm15
  mulsd  %xmm2,%xmm15
  movsd  0x30(%rsp),%xmm2
  addsd  %xmm5,%xmm15
  mulsd  %xmm15,%xmm4
  addsd  %xmm0,%xmm4
  movapd %xmm9,%xmm0
  mulsd  %xmm12,%xmm0
  mulsd  %xmm6,%xmm12
  movapd %xmm0,%xmm15
  movapd %xmm10,%xmm0
  mulsd  %xmm11,%xmm0
  mulsd  %xmm14,%xmm11
  addsd  %xmm15,%xmm0
  movapd %xmm5,%xmm15
  subsd  %xmm2,%xmm5
  subsd  %xmm3,%xmm15
  addsd  %xmm11,%xmm7
  mulsd  %xmm10,%xmm5
  mulsd  %xmm1,%xmm15
  mulsd  %xmm13,%xmm1
  addsd  %xmm2,%xmm5
  addsd  %xmm3,%xmm15
  subsd  %xmm2,%xmm3
  addsd  %xmm12,%xmm1
  mulsd  %xmm9,%xmm3
  mulsd  %xmm15,%xmm0
  mulsd  %xmm5,%xmm1
  addsd  %xmm2,%xmm3
  subsd  %xmm8,%xmm2
  addsd  %xmm4,%xmm0
  movsd  0x8(%rsp),%xmm4
  mulsd  %xmm3,%xmm7
  movsd  0x10(%rsp),%xmm3
  add    $0x50,%rsp
  mulsd  %xmm6,%xmm4
  addsd  %xmm0,%xmm1
  pop    %rbp
  pop    %r12
  mulsd  %xmm14,%xmm3
  pop    %r13
  pop    %r14
  mulsd  %xmm13,%xmm2
  pop    %r15
  addsd  %xmm7,%xmm1
  addsd  %xmm4,%xmm3
  addsd  %xmm8,%xmm2
  mulsd  %xmm3,%xmm2
  addsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D0
type_infered: f64

tool: D0: 1

assistant: ```c
double eight_f3(int a, int b, int c, int d, int e) {
  double ab, ac, ad, ae, bc, bd, be, cb, cd, ce, db, dc, de, eb, ec, ed;
  ab = probability(a, b);
  ac = probability(a, c);
  ad = probability(a, d);
  ae = probability(a, e);
  bc = probability(b, c);
  bd = probability(b, d);
  be = probability(b, e);
  cd = probability(c, d);
  ce = probability(c, e);
  de = probability(d, e);
  cb = 1.0 - bc;
  db = 1.0 - bd;
  dc = 1.0 - cd;
  eb = 1.0 - be;
  ec = 1.0 - ce;
  ed = 1.0 - de;
  return (bc * de + be * dc) * ((ab - ad) * bd + ad) + (bd * ce + be * cd) * ((ab - ac) * bc + ac) + (cb * de + db * ce) * ((ac - ad) * cd + ad) + (cd * eb + cb * ed) * ((ac - ae) * ce + ae) + (dc * eb + db * ec) * ((ad - ae) * de + ae) + (bd * ec + bc * ed) * ((ae - ab) * eb + ab);
}
```