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

```asm
<CubeRoot>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movss  %xmm0,-0x24(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x18(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  mov    %rdx,%rdi
  movd   %eax,%xmm0
  call   <frexp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  mov    %edx,-0x14(%rbp)
  mov    -0x14(%rbp),%ecx
  mov    %ecx,%edx
  add    %edx,%edx
  add    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jle    L1
  subl   $0x3,-0x14(%rbp)
L1:
  mov    -0x18(%rbp),%eax
  sub    -0x14(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%edi
  movd   %eax,%xmm0
  call   <ldexp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x10(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  movsd  D71(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D58(%rip),%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D75(%rip),%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D6(%rip),%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D45(%rip),%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0x10(%rbp),%xmm2
  movsd  D38(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  D82(%rip),%xmm1
  addsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  D44(%rip),%xmm1
  addsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  D31(%rip),%xmm1
  addsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  D87(%rip),%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%edi
  movd   %eax,%xmm0
  call   <ldexp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0xc(%rbp),%xmm0
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D71
type: f64
name: disassemble_data
arguments: tag: D58
type: f64
name: disassemble_data
arguments: tag: D75
type: f64
name: disassemble_data
arguments: tag: D6
type: f64
name: disassemble_data
arguments: tag: D45
type: f64
name: disassemble_data
arguments: tag: D38
type: f64
name: disassemble_data
arguments: tag: D82
type: f64
name: disassemble_data
arguments: tag: D44
type: f64
name: disassemble_data
arguments: tag: D31
type: f64
name: disassemble_data
arguments: tag: D87
type: f64

tool: D71: 45.2548339756803

tool: D58: 192.2798368355061

tool: D75: 119.16548242855816

tool: D6: 13.432501390862399

tool: D45: 0.16361612265857542

tool: D38: 14.808840932191346

tool: D82: 151.97140510444356

tool: D44: 168.52544141015682

tool: D31: 33.99059413502156

tool: D87: 1

assistant: ```c
float CubeRoot(float x) {
  float fr, r;
  int ex, shx;
  fr = (float)frexp(x, &ex);
  shx = ex % 3;
  if (shx > 0)
    shx -= 3;
  ex = (ex - shx) / 3;
  fr = (float)ldexp(fr, shx);
  fr = (float)(((((45.2548339756803022511987494 * fr + 192.2798368355061050458134625) * fr + 119.1654824285581628956914143) * fr + 13.43250139086239872172837314) * fr + 0.1636161226585754240958355063) / ((((14.80884093219134573786480845 * fr + 151.9714051044435648658557668) * fr + 168.5254414101568283957668343) * fr + 33.9905941350215598754191872) * fr + 1.0));
  r = (float)ldexp(fr, ex);
  return r;
}
```