user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<cos>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  pxor   %xmm0,%xmm0
  cvtsi2sd %edi,%xmm0
  mulsd  D2(%rip),%xmm0
  pxor   %xmm8,%xmm8
  cvtsd2ss %xmm0,%xmm8
  movss  %xmm8,0xc(%rsp)
  mov    $0x2,%edi
  call   <factorial@plt>
  mov    %eax,%r15d
  mov    $0x4,%edi
  call   <factorial@plt>
  mov    %eax,%r14d
  mov    $0x6,%edi
  call   <factorial@plt>
  mov    %eax,%r13d
  mov    $0x8,%edi
  call   <factorial@plt>
  mov    %eax,%r12d
  mov    $0xa,%edi
  call   <factorial@plt>
  mov    %eax,%ebp
  mov    $0xc,%edi
  call   <factorial@plt>
  mov    %eax,%ebx
  mov    $0xe,%edi
  call   <factorial@plt>
  movss  0xc(%rsp),%xmm8
  movaps %xmm8,%xmm1
  mulss  %xmm8,%xmm1
  movaps %xmm8,%xmm0
  mulss  %xmm1,%xmm0
  mulss  %xmm8,%xmm0
  movaps %xmm8,%xmm5
  mulss  %xmm0,%xmm5
  mulss  %xmm8,%xmm5
  movaps %xmm8,%xmm4
  mulss  %xmm5,%xmm4
  mulss  %xmm8,%xmm4
  movaps %xmm8,%xmm3
  mulss  %xmm4,%xmm3
  mulss  %xmm8,%xmm3
  movaps %xmm8,%xmm2
  mulss  %xmm3,%xmm2
  mulss  %xmm8,%xmm2
  pxor   %xmm7,%xmm7
  cvtsi2ss %r15d,%xmm7
  movaps %xmm1,%xmm6
  divss  %xmm7,%xmm6
  movss  D4(%rip),%xmm1
  subss  %xmm6,%xmm1
  pxor   %xmm6,%xmm6
  cvtsi2ss %r14d,%xmm6
  divss  %xmm6,%xmm0
  addss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ss %r13d,%xmm1
  divss  %xmm1,%xmm5
  subss  %xmm5,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ss %r12d,%xmm1
  divss  %xmm1,%xmm4
  addss  %xmm4,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ss %ebp,%xmm1
  divss  %xmm1,%xmm3
  subss  %xmm3,%xmm0
  pxor   %xmm3,%xmm3
  cvtsi2ss %ebx,%xmm3
  movaps %xmm2,%xmm1
  divss  %xmm3,%xmm1
  addss  %xmm1,%xmm0
  mulss  %xmm8,%xmm2
  mulss  %xmm8,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm2
  subss  %xmm2,%xmm0
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D2
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D4
data_type: f32

tool: {"D2": [0x39,0x9d,0x52,0xa2,0x46,0xdf,0x91,0x3f]}

tool: D4: 1

assistant: ```c
float cos(int ang) {
  float angrad = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989 / 180 * ang;
  int angf2 = factorial(2);
  int angf4 = factorial(4);
  int angf6 = factorial(6);
  int angf8 = factorial(8);
  int angf10 = factorial(10);
  int angf12 = factorial(12);
  int angf14 = factorial(14);
  float ang2 = angrad * angrad;
  float ang4 = ang2 * angrad * angrad;
  float ang6 = ang4 * angrad * angrad;
  float ang8 = ang6 * angrad * angrad;
  float ang10 = ang8 * angrad * angrad;
  float ang12 = ang10 * angrad * angrad;
  float ang14 = ang12 * angrad * angrad;
  float ang22 = ang2 / angf2;
  float ang44 = ang4 / angf4;
  float ang66 = ang6 / angf6;
  float ang88 = ang8 / angf8;
  float ang101 = ang10 / angf10;
  float ang122 = ang12 / angf12;
  float ang144 = ang14 / angf14;
  float cos = 1 - ang22 + ang44 - ang66 + ang88 - ang101 + ang122 - ang144;
  return cos;
}
```