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

```asm
<raices_c>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D135(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D178(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x2c(%rbp),%rax
  mov    %rax,%rsi
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x1c(%rbp),%rax
  mov    %rax,%rsi
  lea    D178(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    -0x14(%rbp),%eax
  cmp    $0x1,%eax
  je     L21
  cmp    $0x2,%eax
  je     L14
  jmp    L59
L21:
  mov    -0x1c(%rbp),%ecx
  movss  -0x24(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mov    -0x2c(%rbp),%eax
  lea    -0x20(%rbp),%rdx
  lea    -0x18(%rbp),%rsi
  movss  -0xc(%rbp),%xmm2
  movaps %xmm2,%xmm3
  mov    %ecx,%edi
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <Bisect@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x10(%rbp)
  jmp    L32
L14:
  mov    -0x1c(%rbp),%ecx
  movss  -0x24(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mov    -0x2c(%rbp),%eax
  lea    -0x20(%rbp),%rdx
  lea    -0x18(%rbp),%rsi
  movss  -0xc(%rbp),%xmm2
  movaps %xmm2,%xmm3
  mov    %ecx,%edi
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <falsa_posicion@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x10(%rbp)
  jmp    L32
L59:
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <raices@plt>
  nop
L32:
  pxor   %xmm4,%xmm4
  cvtss2sd -0x10(%rbp),%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movss  -0x20(%rbp),%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm0,%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L17
  call   <__stack_chk_fail@plt>
L17:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D27
datatype: string
name: disassemble_data
arguments: data_tag: D135
datatype: string
name: disassemble_data
arguments: data_tag: D28
datatype: string
name: disassemble_data
arguments: data_tag: D178
datatype: string
name: disassemble_data
arguments: data_tag: D68
datatype: string
name: disassemble_data
arguments: data_tag: D53
datatype: string
name: disassemble_data
arguments: data_tag: D106
datatype: string
name: disassemble_data
arguments: data_tag: D87
datatype: string
name: disassemble_data
arguments: data_tag: D158
datatype: string
name: disassemble_data
arguments: data_tag: D121
datatype: string
name: disassemble_data
arguments: data_tag: D75
datatype: string
name: disassemble_data
arguments: data_tag: D76
datatype: string
name: disassemble_data
arguments: data_tag: D73
datatype: string
name: disassemble_data
arguments: data_tag: D115
datatype: string

tool: D27: Elegir el metodo

tool: D135: 1.- Biseccion

tool: D28: 2.- Falsa posicion

tool: D178: %d

tool: D68: 
Dar el valor inical XL: 

tool: D53: %f

tool: D106: 
Dar el valor inical XU: 

tool: D87: 
Dar el valor maximo del error es: 

tool: D158: 
Dar el numero max de iteraciones imax: 

tool: D121: cls

tool: D75: Opcion incorrecta, introducir una opcion correcta

tool: D76: 
La raiz es: %f

tool: D73: 
El error es: %f

tool: D115: 
En %d iteraciones

assistant: ```c
void raices_c() {
  float xl, xu, es, ea, raiz, xr;
  int imax, iter, metodo;
  printf("Elegir el metodo\n");
  printf("1.- Biseccion\n");
  printf("2.- Falsa posicion\n");
  scanf("%d", &metodo);
  printf("\nDar el valor inical XL: ");
  scanf("%f", &xl);
  printf("\nDar el valor inical XU: ");
  scanf("%f", &xu);
  printf("\nDar el valor maximo del error es: ");
  scanf("%f", &es);
  printf("\nDar el numero max de iteraciones imax: ");
  scanf("%d", &imax);
  xr = xl;
  system("cls");
  switch (metodo) {
  case 1:
    raiz = Bisect(xl, xu, es, imax, xr, &iter, &ea);
    break;
  case 2:
    raiz = falsa_posicion(xl, xu, es, imax, xr, &iter, &ea);
    break;
  default:
    system("cls");
    printf("Opcion incorrecta, introducir una opcion correcta");
    raices();
    break;
  }
  printf("\nLa raiz es: %f", raiz);
  printf("\nEl error es: %f", ea);
  printf("\nEn %d iteraciones", iter);
}
```