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

```asm
<find_mantissa_through_float>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  movss  %xmm0,-0x94(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x88(%rbp)
  mov    $0x2e,%edi
  call   <malloc@plt>
  mov    %rax,-0x78(%rbp)
  movw   $0x0,-0x8c(%rbp)
  movl   $0x0,-0x84(%rbp)
  movss  -0x94(%rbp),%xmm0
  movss  D7(%rip),%xmm1
  comiss %xmm1,%xmm0
  jb     L76
  movss  -0x94(%rbp),%xmm0
  movss  D7(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x94(%rbp)
L76:
  movss  -0x94(%rbp),%xmm0
  movss  %xmm0,-0x80(%rbp)
  movw   $0x0,-0x8a(%rbp)
  movl   $0x0,-0x7c(%rbp)
  jmp    L121
L235:
  movss  -0x80(%rbp),%xmm0
  addss  %xmm0,%xmm0
  movss  %xmm0,-0x80(%rbp)
  movss  -0x80(%rbp),%xmm0
  movss  D7(%rip),%xmm1
  comiss %xmm1,%xmm0
  jb     L135
  movswq -0x8c(%rbp),%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movw   $0x1,(%rax)
  jmp    L4
L135:
  movswq -0x8c(%rbp),%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movw   $0x0,(%rax)
L4:
  movzwl -0x8c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x8c(%rbp)
  movss  -0x80(%rbp),%xmm0
  movss  D7(%rip),%xmm1
  comiss %xmm1,%xmm0
  jb     L190
  movss  -0x80(%rbp),%xmm0
  movss  D7(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x80(%rbp)
L190:
  movl   $0x0,-0x84(%rbp)
  jmp    L26
L187:
  mov    -0x84(%rbp),%eax
  cltq
  movss  -0x70(%rbp,%rax,4),%xmm0
  ucomiss -0x80(%rbp),%xmm0
  jp     L78
  ucomiss -0x80(%rbp),%xmm0
  jne    L78
  mov    -0x84(%rbp),%eax
  mov    %eax,-0x7c(%rbp)
  movw   $0x1,-0x8a(%rbp)
  jmp    L100
L78:
  addl   $0x1,-0x84(%rbp)
L26:
  mov    -0x84(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  jl     L187
L100:
  cmpw   $0x0,-0x8a(%rbp)
  jne    L121
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x80(%rbp),%xmm0
  movss  %xmm0,-0x70(%rbp,%rax,4)
  addl   $0x1,-0x88(%rbp)
L121:
  cmpw   $0x17,-0x8c(%rbp)
  jg     L117
  pxor   %xmm0,%xmm0
  ucomiss -0x80(%rbp),%xmm0
  jp     L161
  pxor   %xmm0,%xmm0
  ucomiss -0x80(%rbp),%xmm0
  je     L117
L161:
  cmpw   $0x0,-0x8a(%rbp)
  je     L235
L117:
  pxor   %xmm0,%xmm0
  ucomiss -0x80(%rbp),%xmm0
  jp     L250
  pxor   %xmm0,%xmm0
  ucomiss -0x80(%rbp),%xmm0
  je     L132
L250:
  cmpw   $0x1,-0x8a(%rbp)
  jne    L132
  mov    -0x7c(%rbp),%eax
  mov    %eax,-0x84(%rbp)
  jmp    L66
L124:
  mov    -0x84(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movswq -0x8c(%rbp),%rdx
  lea    (%rdx,%rdx,1),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  movzwl (%rax),%eax
  mov    %ax,(%rdx)
  movzwl -0x8c(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x8c(%rbp)
  addl   $0x1,-0x84(%rbp)
L66:
  cmpl   $0x16,-0x84(%rbp)
  jle    L124
L132:
  pxor   %xmm0,%xmm0
  ucomiss -0x80(%rbp),%xmm0
  jp     L248
  pxor   %xmm0,%xmm0
  ucomiss -0x80(%rbp),%xmm0
  jne    L248
  cmpw   $0x0,-0x8a(%rbp)
  jne    L248
  movswl -0x8c(%rbp),%eax
  mov    %eax,-0x84(%rbp)
  jmp    L195
L146:
  mov    -0x84(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movw   $0x0,(%rax)
  addl   $0x1,-0x84(%rbp)
L195:
  cmpl   $0x16,-0x84(%rbp)
  jle    L146
L248:
  mov    -0x78(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L45
  call   <__stack_chk_fail@plt>
L45:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D7
type_guessed: f32

tool: D7: 1

assistant: ```c
short *find_mantissa_through_float(float number_in_scientific) {
  float results[23];
  int results_index = 0;
  short *mantissa;
  mantissa = (short *)malloc(23 * sizeof(short));
  short mantissa_index = 0;
  int i = 0;
  if (number_in_scientific >= 1.0) {
    number_in_scientific--;
  }
  float res = number_in_scientific;
  short result_repeating = 0;
  int result_repeat_start = 0;
  while (mantissa_index <= 23 && res != 0 && result_repeating == 0) {
    res *= 2;
    if (res >= 1) {
      mantissa[mantissa_index] = 1;
    } else {
      mantissa[mantissa_index] = 0;
    }
    mantissa_index++;
    if (res >= 1) {
      res--;
    }
    for (i = 0; i < results_index; i++) {
      if (results[i] == res) {
        result_repeat_start = i;
        result_repeating = 1;
        break;
      }
    }
    if (result_repeating == 0) {
      results[results_index] = res;
      results_index++;
    }
  }
  if (res != 0 && result_repeating == 1) {
    for (i = result_repeat_start; i < 23; i++) {
      mantissa[mantissa_index] = mantissa[i];
      mantissa_index++;
    }
  }
  if (res == 0 && result_repeating == 0) {
    for (i = mantissa_index; i < 23; i++) {
      mantissa[i] = 0;
    }
  }
  return mantissa;
}
```