user: Please show me the C implementation that matches the assembly code listed below:

```asm
<sin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  movsd  %xmm0,-0x48(%rbp)
  movsd  D50(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movsd  D30(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  add    %eax,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D89(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x48(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  comisd D89(%rip),%xmm0
  jbe    L2
  movsd  -0x48(%rbp),%xmm0
  movsd  D89(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D137(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
L2:
  movsd  -0x48(%rbp),%xmm0
  comisd D22(%rip),%xmm0
  jbe    L15
  movsd  D89(%rip),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
L15:
  movsd  -0x48(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x48(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  D101(%rip),%xmm1
  movapd %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x28(%rbp),%xmm0
  movsd  D93(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  movsd  D138(%rip),%xmm3
  movapd %xmm1,%xmm2
  divsd  %xmm3,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x18(%rbp),%xmm0
  movsd  D31(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x10(%rbp),%xmm1
  movsd  D120(%rip),%xmm3
  movapd %xmm1,%xmm2
  divsd  %xmm3,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x8(%rbp),%xmm0
  movsd  D75(%rip),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D50
datatype: f64
name: disassemble_data
arguments: label: D30
datatype: byte[8]
name: disassemble_data
arguments: label: D89
datatype: f64[2]
name: disassemble_data
arguments: label: D137
datatype: byte[8]
name: disassemble_data
arguments: label: D22
datatype: f64[2]
name: disassemble_data
arguments: label: D101
datatype: byte[8]
name: disassemble_data
arguments: label: D93
datatype: byte[8]
name: disassemble_data
arguments: label: D138
datatype: byte[8]
name: disassemble_data
arguments: label: D31
datatype: byte[8]
name: disassemble_data
arguments: label: D120
datatype: byte[8]
name: disassemble_data
arguments: label: D75
datatype: byte[8]

tool: D50: 1

tool: {"D30": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

tool: {"D89": [3.141592653589793,-1.0]}

tool: {"D137": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: {"D22": [1.5707963267948966,6.0]}

tool: {"D101": [0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x40]}

tool: {"D93": [0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0x40]}

tool: {"D138": [0x00,0x00,0x00,0x00,0x00,0xb0,0xb3,0x40]}

tool: {"D31": [0x00,0x00,0x00,0x00,0x00,0x26,0x16,0x41]}

tool: {"D120": [0x00,0x00,0x00,0x00,0xa8,0x08,0x83,0x41]}

tool: {"D75": [0x00,0x00,0x00,0xc0,0x8c,0x32,0xf7,0x41]}

assistant: ```c
double sin(double x) {
  double sign;
  double x2, x3, x5, x7, x9, x11, x13;
  sign = 1.0;
  x = x - floor(x / (2 * 3.1415926535897932384626433832795)) * 2 * 3.1415926535897932384626433832795;
  if (x > 3.1415926535897932384626433832795) {
    x = x - 3.1415926535897932384626433832795;
    sign = -1;
  }
  if (x > 1.5707963267948966192313216916398) {
    x = 3.1415926535897932384626433832795 - x;
  }
  x2 = x * x;
  x3 = x * x2;
  x5 = x3 * x2;
  x7 = x5 * x2;
  x9 = x7 * x2;
  x11 = x9 * x2;
  x13 = x11 * x2;
  return sign * (x - x3 / 6 + x5 / 120 - x7 / 5040 + x9 / 362880 - x11 / 39916800 + x13 / 6227020800);
}
```