user: What would the C source look like for the assembly code provided here?

```asm
<lms_sin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movl   $0x1,-0x4(%rbp)
  jmp    L48
L19:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x18(%rbp),%xmm0
  movsd  D49(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
L48:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x18(%rbp),%xmm0
  comisd D49(%rip),%xmm0
  ja     L19
  jmp    L23
L9:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x18(%rbp),%xmm1
  movsd  D49(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
L23:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x18(%rbp),%xmm1
  movsd  D18(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L9
  movss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  D54(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mulss  -0x8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm0,%xmm3
  movsd  D32(%rip),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0xc(%rbp),%xmm0
  addss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  addl   $0x1,-0x4(%rbp)
  jmp    L46
L5:
  movss  -0x18(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  D54(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mulss  -0x8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm0,%xmm3
  movsd  D32(%rip),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0xc(%rbp),%xmm0
  addss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  addl   $0x1,-0x4(%rbp)
L46:
  pxor   %xmm4,%xmm4
  cvtss2sd -0x8(%rbp),%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  mov    $0x1,%eax
  call   <lms_fabs@plt>
  test   %eax,%eax
  jg     L5
  movss  -0xc(%rbp),%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D49
type_guessed: byte[16]
name: disassemble_data
arguments: data_tag: D18
type_guessed: byte[8]
name: disassemble_data
arguments: data_tag: D54
type_guessed: byte[4]
name: disassemble_data
arguments: data_tag: D32
type_guessed: f64

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

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

tool: {"D54": [0x00,0x00,0x00,0x80]}

tool: D32: 1

assistant: ```c
float lms_sin(rad)
float rad;
{
  float app;
  float diff;
  int inc = 1;
  while (rad > 2 * 3.14159265358979323846)
    rad -= 2 * 3.14159265358979323846;
  while (rad < -2 * 3.14159265358979323846)
    rad += 2 * 3.14159265358979323846;
  app = diff = rad;
  diff = (diff * (-(rad * rad))) / ((2.0 * inc) * (2.0 * inc + 1.0));
  app = app + diff;
  inc++;
  while (lms_fabs(diff) >= 0.00001) {
    diff = (diff * (-(rad * rad))) / ((2.0 * inc) * (2.0 * inc + 1.0));
    app = app + diff;
    inc++;
  }
  return (app);
}
```