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

```asm
<quadratic_formula>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D100(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D157(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D150(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x1c(%rbp),%rax
  mov    %rax,%rsi
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x20(%rbp),%eax
  movsd  D173(%rip),%xmm0
  movapd %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x24(%rbp),%xmm2
  movss  D171(%rip),%xmm1
  mulss  %xmm1,%xmm2
  movss  -0x1c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jns    L28
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L6
L28:
  mov    -0x20(%rbp),%eax
  movsd  D173(%rip),%xmm0
  movapd %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  -0x24(%rbp),%xmm2
  movss  D171(%rip),%xmm1
  mulss  %xmm1,%xmm2
  movss  -0x1c(%rbp),%xmm1
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movsd  D184(%rip),%xmm0
  mov    -0x14(%rbp),%eax
  movapd %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x20(%rbp),%xmm2
  movss  -0x14(%rbp),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  -0x24(%rbp),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  divss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  -0x20(%rbp),%xmm0
  movss  D144(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  subss  -0x14(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  divss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jne    L9
  pxor   %xmm3,%xmm3
  cvtss2sd -0x10(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L6
L9:
  pxor   %xmm4,%xmm4
  cvtss2sd -0x10(%rbp),%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  pxor   %xmm5,%xmm5
  cvtss2sd -0xc(%rbp),%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L6:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L25
  call   <__stack_chk_fail@plt>
L25:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D100
type_guessed: string
name: extract_symbolic_data
arguments: label: D84
type_guessed: string
name: extract_symbolic_data
arguments: label: D157
type_guessed: string
name: extract_symbolic_data
arguments: label: D150
type_guessed: string
name: extract_symbolic_data
arguments: label: D173
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D171
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D20
type_guessed: string
name: extract_symbolic_data
arguments: label: D184
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D144
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D187
type_guessed: string
name: extract_symbolic_data
arguments: label: D60
type_guessed: string
name: extract_symbolic_data
arguments: label: D21
type_guessed: string
name: extract_symbolic_data
arguments: label: D130
type_guessed: string

tool: D100: A value: 

tool: D84: %f

tool: D157: B value: 

tool: D150: C value: 

tool: {"D173": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: {"D171": [0x00,0x00,0x80,0x40]}

tool: D20: No real solutions

tool: {"D184": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

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

tool: D187: Solution: (%f

tool: D60: ,0)

tool: D21: Solution 1: (%f

tool: D130: Solution 2: (%f

assistant: ```c
void quadratic_formula() {
  float a, b, c, d, qf1, qf2;
  int dis;
  printf("A value: ");
  scanf("%f", &a);
  printf("B value: ");
  scanf("%f", &b);
  printf("C value: ");
  scanf("%f", &c);
  dis = pow(b, 2) - (4 * a * c);
  if (dis < 0) {
    printf("No real solutions\n");
  } else {
    d = (pow(b, 2)) - (4 * a * c);
    d = pow(d, .5);
    qf1 = (-b + d) / (2 * a);
    qf2 = (-b - d) / (2 * a);
    if (dis == 0) {
      printf("Solution: (%f", qf1);
      printf(",0)\n");
    } else {
      printf("Solution 1: (%f", qf1);
      printf(",0)\n");
      printf("Solution 2: (%f", qf2);
      printf(",0)\n");
      ;
    }
  }
}
```