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

```asm
<calcul_exposants_Holder_points>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %esi,%r15d
  mov    %esi,0x64(%rsp)
  mov    %rdx,0x50(%rsp)
  mov    %ecx,%r14d
  mov    %r8,%r13
  mov    %r9,%rbx
  mov    %edi,0x60(%rsp)
  movslq %edi,%rax
  lea    0x0(,%rax,8),%rbp
  mov    %rbp,%rdi
  call   <malloc@plt>
  mov    %rax,%r12
  mov    %rbp,%rdi
  call   <malloc@plt>
  mov    %rax,%rbp
  movslq %r15d,%rdi
  shl    $0x2,%rdi
  call   <malloc@plt>
  mov    %rax,%r15
  test   %r14d,%r14d
  jle    L233
  mov    %rbx,0x58(%rsp)
  lea    -0x1(%r14),%eax
  lea    0x8(%rbx,%rax,8),%rax
  mov    %rax,0x68(%rsp)
  mov    0x60(%rsp),%edi
  lea    -0x1(%rdi),%r14d
  lea    0x8(,%r14,8),%rax
  mov    %rax,0x28(%rsp)
  mov    %r14,%rax
  mov    %r15,%r14
  mov    %r13,%rbx
  mov    %rbp,%r13
  mov    %rax,%r15
  jmp    L264
L85:
  movsd  0x10(%rsp),%xmm1
  mov    D128(%rip),%rax
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm0
  mulsd  0x18(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,(%r12,%rbp,1)
  movsd  0x10(%rsp),%xmm1
  mov    D128(%rip),%rax
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  0x18(%rsp),%xmm3
  addsd  D12(%rip),%xmm3
  movapd %xmm3,%xmm0
  mulsd  0x8(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,(%r14,%rbp,1)
  add    $0x8,%rbp
  cmp    0x28(%rsp),%rbp
  je     L320
L148:
  mov    0xb8(%rsp),%rax
  movsd  (%rax,%rbp,1),%xmm4
  movsd  %xmm4,0x20(%rsp)
  mov    (%r15),%rax
  movsd  (%rax,%rbp,1),%xmm0
  subsd  %xmm4,%xmm0
  movq   %xmm0,%rbx
  movsd  0x0(%r13,%rbp,1),%xmm6
  movsd  %xmm6,0x8(%rsp)
  pxor   %xmm7,%xmm7
  cvtsi2sdl 0x30(%rsp),%xmm7
  movsd  %xmm7,0x10(%rsp)
  movapd %xmm7,%xmm1
  mov    D128(%rip),%rax
  movq   %rax,%xmm0
  call   <pow@plt>
  movsd  0x8(%rsp),%xmm1
  divsd  %xmm0,%xmm1
  movq   %rbx,%xmm0
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rbx
  movsd  D95(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D71(%rip),%xmm3
  ucomisd %xmm1,%xmm3
  jbe    L100
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm2
  cmpnlesd %xmm0,%xmm2
  movsd  D12(%rip),%xmm5
  andpd  %xmm5,%xmm2
  subsd  %xmm2,%xmm1
  movsd  D95(%rip),%xmm2
  andnpd %xmm0,%xmm2
  orpd   %xmm2,%xmm1
  movq   %xmm1,%rbx
L100:
  mov    %rbx,0x18(%rsp)
  movsd  0x10(%rsp),%xmm1
  movsd  D128(%rip),%xmm0
  call   <pow@plt>
  subsd  D56(%rip),%xmm0
  movq   %rbx,%xmm6
  comisd %xmm0,%xmm6
  jbe    L85
  movq   %rbx,%xmm7
  subsd  D12(%rip),%xmm7
  movsd  %xmm7,0x18(%rsp)
  jmp    L85
L320:
  mov    0x38(%rsp),%r15
  mov    0x40(%rsp),%r13
L36:
  mov    0x34(%rsp),%eax
  test   %eax,%eax
  jle    L48
  lea    -0x1(%rax),%r11d
  mov    %eax,%r9d
  mov    $0x0,%esi
  mov    D176(%rip),%rbx
  mov    $0x0,%edi
  movsd  D12(%rip),%xmm4
  movsd  D128(%rip),%xmm3
  mov    $0x0,%r10d
  movsd  D56(%rip),%xmm2
  movq   %rbx,%xmm5
  mov    %eax,%ebx
  mov    %r11d,0x8(%rsp)
  mov    0x60(%rsp),%ebp
  mov    0x50(%rsp),%r11
  jmp    L301
L240:
  mov    %rdx,%rax
L57:
  movsd  (%rcx,%rax,8),%xmm1
  movsd  (%r12,%rax,8),%xmm0
  subsd  %xmm2,%xmm0
  comisd %xmm1,%xmm0
  ja     L162
  movsd  (%r14,%rax,8),%xmm0
  addsd  D56(%rip),%xmm0
  comisd %xmm0,%xmm1
  ja     L162
  lea    0x1(%rax),%rdx
  cmp    %r13,%rax
  jne    L240
L126:
  addsd  %xmm4,%xmm5
  comisd %xmm3,%xmm5
  jae    L218
  mov    (%r15,%rsi,4),%edx
  movslq %edi,%rax
  mov    %edx,(%r15,%rax,4)
  add    $0x1,%edi
L162:
  add    $0x1,%rsi
  cmp    %r9,%rsi
  je     L47
L301:
  mov    %esi,%r8d
  test   %ebp,%ebp
  jle    L126
  movslq (%r15,%rsi,4),%rax
  mov    (%r11,%rax,8),%rcx
  mov    %r10,%rax
  jmp    L57
L218:
  mov    %ebx,%ebp
  movq   %xmm5,%rbx
  mov    0x8(%rsp),%r11d
  cmp    0x34(%rsp),%r8d
  jge    L187
  movslq %r8d,%r8
  lea    (%r15,%r8,4),%rax
  mov    %esi,%r9d
  mov    %r11d,%edx
  sub    %esi,%edx
  add    %r8,%rdx
  lea    0x4(%r15,%rdx,4),%rsi
  movslq %edi,%rcx
  sub    %r8,%rcx
L248:
  mov    (%rax),%edx
  mov    %edx,(%rax,%rcx,4)
  add    $0x4,%rax
  cmp    %rsi,%rax
  jne    L248
  add    %ebp,%edi
  sub    %r9d,%edi
  mov    %edi,0x34(%rsp)
  jmp    L329
L187:
  mov    %edi,0x34(%rsp)
  jmp    L329
L47:
  movq   %xmm5,%rbx
  mov    %edi,0x34(%rsp)
L329:
  cmpl   $0x1,0xc0(%rsp)
  je     L73
L202:
  movsd  D12(%rip),%xmm0
  movq   %rbx,%xmm3
  comisd %xmm3,%xmm0
  ja     L145
  movsd  D128(%rip),%xmm0
  comisd %xmm3,%xmm0
  ja     L322
  addl   $0x1,0x30(%rsp)
  mov    0x30(%rsp),%eax
  cmp    $0x15,%eax
  je     L208
L96:
  mov    $0x0,%ebp
  cmpl   $0x0,0x60(%rsp)
  jle    L36
  mov    %r15,0x38(%rsp)
  mov    %r13,0x40(%rsp)
  mov    0x48(%rsp),%r15
  mov    0xb0(%rsp),%r13
  jmp    L148
L290:
  mov    D176(%rip),%rbx
  movl   $0x0,0x34(%rsp)
L73:
  movq   %rbx,%xmm0
  lea    D121(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L202
L322:
  mov    %r13,%rax
  mov    %r14,%r13
  mov    %r15,%r14
  mov    0x48(%rsp),%rbx
  mov    %rax,%r15
  addl   $0x1,0x30(%rsp)
  jmp    L29
L145:
  mov    %r13,%rax
  mov    %r14,%r13
  mov    %r15,%r14
  mov    0x48(%rsp),%rbx
  mov    %rax,%r15
  jmp    L29
L208:
  mov    %r13,%rax
  mov    %r14,%r13
  mov    %r15,%r14
  mov    0x48(%rsp),%rbx
  mov    %rax,%r15
L29:
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x30(%rsp),%xmm0
  mov    0x58(%rsp),%rax
  movsd  %xmm0,(%rax)
  add    $0x8,%rax
  mov    %rax,0x58(%rsp)
  add    $0x8,%rbx
  cmp    0x68(%rsp),%rax
  je     L339
L264:
  mov    0x64(%rsp),%edi
  mov    %edi,%edx
  mov    $0x0,%eax
  test   %edi,%edi
  jle    L244
L226:
  mov    %eax,(%r14,%rax,4)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L226
L244:
  mov    0x64(%rsp),%eax
  mov    %eax,0x34(%rsp)
  movl   $0x1,0x30(%rsp)
  mov    %r15,%rax
  mov    %r14,%r15
  mov    %r13,%r14
  mov    %rbx,0x48(%rsp)
  mov    %rax,%r13
  jmp    L96
L339:
  mov    %r13,%rbp
  mov    %r14,%r15
L233:
  mov    %r12,%rdi
  call   <free@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r15,%rdi
  call   <free@plt>
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L48:
  cmpl   $0x1,0xc0(%rsp)
  je     L290
  mov    %r13,%rax
  mov    %r14,%r13
  mov    %r15,%r14
  mov    0x48(%rsp),%rbx
  mov    %rax,%r15
  jmp    L29
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D128
datatype: f64
name: extract_symbolic_data
arguments: data_label: D12
datatype: f64
name: extract_symbolic_data
arguments: data_label: D95
datatype: byte[8]
name: extract_symbolic_data
arguments: data_label: D71
datatype: byte[8]
name: extract_symbolic_data
arguments: data_label: D56
datatype: f64
name: extract_symbolic_data
arguments: data_label: D176
datatype: byte[8]
name: extract_symbolic_data
arguments: data_label: D121
datatype: string

tool: D128: 2

tool: D12: 1

tool: {"D95": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

tool: {"D71": [0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x43]}

tool: D56: 1e-06

tool: {"D176": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D121: nb_copains : %.2f


assistant: ```c
void calcul_exposants_Holder_points(int nb_dimensions, int nb_individus_total, double **coordonnees_tous_individus, int nb_individus, double **coordonnees_individus, double *exposants_Holder, double *cotes_hyperpave, double *valeurs_minimum, int mode_verbose, int test) {
  int i, j, k, l, test_individu_dans_le_meme_hyperpave, nb_mesures, nb_mesures_max;
  int *individus_a_tester, nb_individus_a_tester, compteur;
  double *bornes_inf, *bornes_sup, indice_segment_axe, nb_copains;
  nb_mesures_max = 20;
  bornes_inf = (double *)malloc(sizeof(double) * nb_dimensions);
  bornes_sup = (double *)malloc(sizeof(double) * nb_dimensions);
  individus_a_tester = (int *)malloc(sizeof(int) * nb_individus_total);
  for (i = 0; i < nb_individus; i++) {
    nb_mesures = 1;
    for (j = 0; j < nb_individus_total; j++) {
      individus_a_tester[j] = j;
    }
    nb_individus_a_tester = nb_individus_total;
    for (j = 0; j < nb_mesures_max; j++) {
      for (k = 0; k < nb_dimensions; k++) {
        indice_segment_axe = floor((double)(coordonnees_individus[i][k] - valeurs_minimum[k]) / ((double)cotes_hyperpave[k] / pow(2.0, (double)(j + 1))));
        if (indice_segment_axe > pow(2.0, (double)(j + 1)) - 0.000001) {
          indice_segment_axe -= 1.0;
        }
        bornes_inf[k] = indice_segment_axe * cotes_hyperpave[k] / pow(2.0, (double)(j + 1)) + valeurs_minimum[k];
        bornes_sup[k] = (1.0 + indice_segment_axe) * cotes_hyperpave[k] / pow(2.0, (double)(j + 1)) + valeurs_minimum[k];
      }
      nb_copains = 0;
      compteur = 0;
      for (k = 0; k < nb_individus_a_tester; k++) {
        test_individu_dans_le_meme_hyperpave = 1;
        for (l = 0; l < nb_dimensions; l++) {
          if ((coordonnees_tous_individus[individus_a_tester[k]][l] < bornes_inf[l] - 0.000001) || (coordonnees_tous_individus[individus_a_tester[k]][l] > bornes_sup[l] + 0.000001)) {
            test_individu_dans_le_meme_hyperpave = 0;
            break;
          }
        }
        if (test_individu_dans_le_meme_hyperpave == 1) {
          nb_copains += 1.0;
          if (nb_copains >= 2.0) {
            for (l = k; l < nb_individus_a_tester; l++) {
              individus_a_tester[compteur] = individus_a_tester[l];
              compteur++;
            }
            break;
          } else {
            individus_a_tester[compteur] = individus_a_tester[k];
            compteur++;
          }
        }
      }
      nb_individus_a_tester = compteur;
      if (mode_verbose == 1) {
        printf("nb_copains : %.2f\n", nb_copains);
      }
      if (nb_copains < 1.0) {
        break;
      } else if (nb_copains < 2.0) {
        nb_mesures++;
        break;
      } else {
        nb_mesures++;
      }
    }
    exposants_Holder[i] = (double)nb_mesures;
  }
  free(bornes_inf);
  free(bornes_sup);
  free(individus_a_tester);
}
```