void calcul_exposants_Holder(int nb_dissimilarites,
                             double *historique_dissimilarites,
                             int *nb_exposants_Holder,
                             double *exposants_Holder) {
  int i, j, nb_mesures, compteur_exposants_Holder, nb_exposants_Holder_faibles;
  double **valeurs_pour_regression, mesure_max;
  valeurs_pour_regression =
      (double **)malloc(sizeof(double *) * (nb_dissimilarites - 1));
  for (i = 0; i < nb_dissimilarites - 1; i++) {
    valeurs_pour_regression[i] = (double *)malloc(sizeof(double) * 2);
  }
  mesure_max = historique_dissimilarites[0] -
               historique_dissimilarites[nb_dissimilarites - 1];
  compteur_exposants_Holder = 0;
  for (i = 0; i < nb_dissimilarites - 1; i++) {
    nb_mesures = (int)floor(log((double)(nb_dissimilarites - i)) / log(2.0));
    for (j = nb_mesures; j > 0; j--) {
      if (((historique_dissimilarites[i] -
            historique_dissimilarites[i + (int)pow(2.0, (double)j) - 1]) /
           mesure_max) < 0.000001) {
        nb_mesures--;
      } else {
        valeurs_pour_regression[nb_mesures - j][1] = log(
            (double)(historique_dissimilarites[i] -
                     historique_dissimilarites[i + (int)pow(2.0, (double)j) -
                                               1]) /
            mesure_max);
        valeurs_pour_regression[nb_mesures - j][0] =
            -log(2.0) * (double)(nb_mesures - j);
      }
    }
    if (nb_mesures > 1) {
      exposants_Holder[compteur_exposants_Holder] =
          regression_lineaire(nb_mesures, valeurs_pour_regression);
      if (exposants_Holder[compteur_exposants_Holder] > 1.0) {
        exposants_Holder[compteur_exposants_Holder] = 1.0;
      }
      compteur_exposants_Holder++;
    }
  }
  *nb_exposants_Holder = compteur_exposants_Holder;
  for (i = 0; i < nb_dissimilarites - 1; i++) {
    free(valeurs_pour_regression[i]);
  }
  free(valeurs_pour_regression);
}


x86 assembly (clang, -O0):
<calcul_exposants_Holder>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
movslq %eax,%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11cf <calcul_exposants_Holder+0x6f>
mov    $0x10,%edi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    -0x40(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1197 <calcul_exposants_Holder+0x37>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    140f <calcul_exposants_Holder+0x2af>
mov    -0x4(%rbp),%eax
sub    -0x24(%rbp),%eax
cvtsi2sd %eax,%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  0xdd7(%rip),%xmm0
call   1060 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
divsd  %xmm1,%xmm0
call   1080 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jle    1396 <calcul_exposants_Holder+0x236>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x64(%rbp)
cvtsi2sdl -0x28(%rbp),%xmm1
movsd  0xd7d(%rip),%xmm0
call   1070 <pow@plt>
mov    -0x64(%rbp),%ecx
movsd  -0x60(%rbp),%xmm1
mov    -0x58(%rbp),%rax
cvttsd2si %xmm0,%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm1
divsd  -0x48(%rbp),%xmm1
movsd  0xd5e(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12ca <calcul_exposants_Holder+0x16a>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1383 <calcul_exposants_Holder+0x223>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x7c(%rbp)
cvtsi2sdl -0x28(%rbp),%xmm1
movsd  0xd09(%rip),%xmm0
call   1070 <pow@plt>
mov    -0x7c(%rbp),%ecx
mov    -0x78(%rbp),%rax
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
cvttsd2si %xmm1,%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
divsd  -0x48(%rbp),%xmm0
call   1060 <log@plt>
mov    -0x40(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,0x8(%rax)
movsd  0xcbc(%rip),%xmm0
call   1060 <log@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    -0x28(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,(%rax)
jmp    1388 <calcul_exposants_Holder+0x228>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    124c <calcul_exposants_Holder+0xec>
cmpl   $0x1,-0x2c(%rbp)
jle    13fc <calcul_exposants_Holder+0x29c>
mov    -0x2c(%rbp),%edi
mov    -0x40(%rbp),%rsi
mov    $0x0,%al
call   1040 <regression_lineaire@plt>
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xc34(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13f3 <calcul_exposants_Holder+0x293>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  0xc1a(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1401 <calcul_exposants_Holder+0x2a1>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11fc <calcul_exposants_Holder+0x9c>
mov    -0x30(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    144f <calcul_exposants_Holder+0x2ef>
mov    -0x40(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    141f <calcul_exposants_Holder+0x2bf>
mov    -0x40(%rbp),%rdi
call   1030 <free@plt>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<calcul_exposants_Holder>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rcx,0x38(%rsp)
mov    %rdx,0x20(%rsp)
mov    %rsi,%rbp
mov    %edi,%r13d
movslq %edi,%r12
lea    -0x8(,%r12,8),%rdi
ff
call   1060 <malloc@plt>
mov    %rax,%r15
cmp    $0x2,%r12d
jl     1389 <calcul_exposants_Holder+0x229>
add    $0xffffffffffffffff,%r12
mov    %r12d,%r14d
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0x10,%edi
call   1060 <malloc@plt>
mov    %rax,(%r15,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r14
jne    11b0 <calcul_exposants_Holder+0x50>
cmp    $0x2,%r13d
jl     1389 <calcul_exposants_Holder+0x229>
mov    %r15,0x10(%rsp)
movsd  0x0(%rbp),%xmm0
subsd  0x0(%rbp,%r12,8),%xmm0
mov    %r12,0x30(%rsp)
mov    %r12d,%eax
mov    %rax,0x40(%rsp)
xor    %r12d,%r12d
xor    %eax,%eax
mov    %rax,0x8(%rsp)
mov    %r13d,0x4(%rsp)
movsd  %xmm0,0x28(%rsp)
jmp    1224 <calcul_exposants_Holder+0xc4>
cs nopw 0x0(%rax,%rax,1)
mov    0x4(%rsp),%r13d
add    $0x1,%r12
cmp    0x40(%rsp),%r12
je     13aa <calcul_exposants_Holder+0x24a>
mov    %r13d,%eax
sub    %r12d,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
call   1070 <log@plt>
divsd  0xdc2(%rip),%xmm0
call   1080 <floor@plt>
cvttsd2si %xmm0,%ebx
test   %ebx,%ebx
jle    1215 <calcul_exposants_Holder+0xb5>
lea    -0x1(%r12),%r15d
movslq %ebx,%r13
neg    %r13
mov    %ebx,%r14d
movsd  0xda7(%rip),%xmm0
jmp    12ed <calcul_exposants_Holder+0x18d>
cs nopw 0x0(%rax,%rax,1)
movsd  0x0(%rbp,%r12,8),%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  0xd83(%rip),%xmm0
mov    %ebx,%edi
call   1040 <ldexp@plt>
cvttsd2si %xmm0,%eax
add    %r15d,%eax
cltq
movsd  0x18(%rsp),%xmm0
subsd  0x0(%rbp,%rax,8),%xmm0
divsd  0x28(%rsp),%xmm0
call   1070 <log@plt>
lea    (%r14,%r13,1),%eax
movslq %r14d,%rcx
add    %r13,%rcx
mov    0x10(%rsp),%rdx
mov    (%rdx,%rcx,8),%rcx
movsd  %xmm0,0x8(%rcx)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xd45(%rip),%xmm0
movsd  %xmm0,(%rcx)
movsd  0xd29(%rip),%xmm0
lea    -0x1(%rbx),%eax
add    $0x1,%r13
cmp    $0x1,%ebx
mov    %eax,%ebx
jle    1340 <calcul_exposants_Holder+0x1e0>
movsd  0x0(%rbp,%r12,8),%xmm1
movsd  %xmm1,0x18(%rsp)
mov    %ebx,%edi
call   1040 <ldexp@plt>
cvttsd2si %xmm0,%eax
add    %r15d,%eax
cltq
movsd  0x18(%rsp),%xmm2
subsd  0x0(%rbp,%rax,8),%xmm2
movsd  0x28(%rsp),%xmm0
divsd  %xmm0,%xmm2
movsd  0xce8(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    1270 <calcul_exposants_Holder+0x110>
add    $0xffffffff,%r14d
jmp    12d7 <calcul_exposants_Holder+0x177>
nopl   0x0(%rax,%rax,1)
cmp    $0x2,%r14d
jl     1210 <calcul_exposants_Holder+0xb0>
mov    %r14d,%edi
mov    0x10(%rsp),%rsi
xor    %eax,%eax
call   1050 <regression_lineaire@plt>
mov    0x8(%rsp),%rdx
movslq %edx,%rdx
test   %eax,%eax
mov    $0x1,%ecx
cmovg  %ecx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    0x38(%rsp),%rax
movsd  %xmm0,(%rax,%rdx,8)
add    $0x1,%edx
mov    %rdx,0x8(%rsp)
jmp    1210 <calcul_exposants_Holder+0xb0>
mov    0x20(%rsp),%rax
movl   $0x0,(%rax)
mov    %r15,%rdi
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>
mov    0x20(%rsp),%rax
mov    0x8(%rsp),%rcx
mov    %ecx,(%rax)
cmp    $0x2,%r13d
mov    0x10(%rsp),%r15
jl     1394 <calcul_exposants_Holder+0x234>
mov    0x30(%rsp),%ebx
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
mov    (%r15,%rbp,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    13d0 <calcul_exposants_Holder+0x270>
jmp    1394 <calcul_exposants_Holder+0x234>

LLVM IR (-O0):
define void @calcul_exposants_Holder(i32 %0, double* %1, i32* %2, double* %3) {
%5 = alloca i32
%6 = alloca double*
%7 = alloca i32*
%8 = alloca double*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca double**
%15 = alloca double
store i32 %0, i32* %5
store double* %1, double** %6
store i32* %2, i32** %7
store double* %3, double** %8
%16 = load i32, i32* %5
%17 = sub nsw i32 %16, 1
%18 = sext i32 %17 to i64
%19 = mul i64 8, %18
%20 = call i8* @malloc(i64 %19)
%21 = bitcast i8* %20 to double**
store double** %21, double*** %14
store i32 0, i32* %9
br label %22
22: ; preds = %34, %4
%23 = load i32, i32* %9
%24 = load i32, i32* %5
%25 = sub nsw i32 %24, 1
%26 = icmp slt i32 %23, %25
br i1 %26, label %27, label %37
27: ; preds = %22
%28 = call i8* @malloc(i64 16)
%29 = bitcast i8* %28 to double*
%30 = load double**, double*** %14
%31 = load i32, i32* %9
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds double*, double** %30, i64 %32
store double* %29, double** %33
br label %34
34: ; preds = %27
%35 = load i32, i32* %9
%36 = add nsw i32 %35, 1
store i32 %36, i32* %9
br label %22
37: ; preds = %22
%38 = load double*, double** %6
%39 = getelementptr inbounds double, double* %38, i64 0
%40 = load double, double* %39
%41 = load double*, double** %6
%42 = load i32, i32* %5
%43 = sub nsw i32 %42, 1
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds double, double* %41, i64 %44
%46 = load double, double* %45
%47 = fsub double %40, %46
store double %47, double* %15
store i32 0, i32* %12
store i32 0, i32* %9
br label %48
48: ; preds = %166, %37
%49 = load i32, i32* %9
%50 = load i32, i32* %5
%51 = sub nsw i32 %50, 1
%52 = icmp slt i32 %49, %51
br i1 %52, label %53, label %169
53: ; preds = %48
%54 = load i32, i32* %5
%55 = load i32, i32* %9
%56 = sub nsw i32 %54, %55
%57 = sitofp i32 %56 to double
%58 = call double @log(double %57)
%59 = call double @log(double 2.000000e+00)
%60 = fdiv double %58, %59
%61 = call double @llvm.floor.f64(double %60)
%62 = fptosi double %61 to i32
store i32 %62, i32* %11
%63 = load i32, i32* %11
store i32 %63, i32* %10
br label %64
64: ; preds = %136, %53
%65 = load i32, i32* %10
%66 = icmp sgt i32 %65, 0
br i1 %66, label %67, label %139
67: ; preds = %64
%68 = load double*, double** %6
%69 = load i32, i32* %9
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double, double* %68, i64 %70
%72 = load double, double* %71
%73 = load double*, double** %6
%74 = load i32, i32* %9
%75 = load i32, i32* %10
%76 = sitofp i32 %75 to double
%77 = call double @pow(double 2.000000e+00, double %76)
%78 = fptosi double %77 to i32
%79 = add nsw i32 %74, %78
%80 = sub nsw i32 %79, 1
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds double, double* %73, i64 %81
%83 = load double, double* %82
%84 = fsub double %72, %83
%85 = load double, double* %15
%86 = fdiv double %84, %85
%87 = fcmp olt double %86, 0x3EB0C6F7A0B5ED8D
br i1 %87, label %88, label %91
88: ; preds = %67
%89 = load i32, i32* %11
%90 = add nsw i32 %89, -1
store i32 %90, i32* %11
br label %135
91: ; preds = %67
%92 = load double*, double** %6
%93 = load i32, i32* %9
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds double, double* %92, i64 %94
%96 = load double, double* %95
%97 = load double*, double** %6
%98 = load i32, i32* %9
%99 = load i32, i32* %10
%100 = sitofp i32 %99 to double
%101 = call double @pow(double 2.000000e+00, double %100)
%102 = fptosi double %101 to i32
%103 = add nsw i32 %98, %102
%104 = sub nsw i32 %103, 1
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double, double* %97, i64 %105
%107 = load double, double* %106
%108 = fsub double %96, %107
%109 = load double, double* %15
%110 = fdiv double %108, %109
%111 = call double @log(double %110)
%112 = load double**, double*** %14
%113 = load i32, i32* %11
%114 = load i32, i32* %10
%115 = sub nsw i32 %113, %114
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds double*, double** %112, i64 %116
%118 = load double*, double** %117
%119 = getelementptr inbounds double, double* %118, i64 1
store double %111, double* %119
%120 = call double @log(double 2.000000e+00)
%121 = fneg double %120
%122 = load i32, i32* %11
%123 = load i32, i32* %10
%124 = sub nsw i32 %122, %123
%125 = sitofp i32 %124 to double
%126 = fmul double %121, %125
%127 = load double**, double*** %14
%128 = load i32, i32* %11
%129 = load i32, i32* %10
%130 = sub nsw i32 %128, %129
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds double*, double** %127, i64 %131
%133 = load double*, double** %132
%134 = getelementptr inbounds double, double* %133, i64 0
store double %126, double* %134
br label %135
135: ; preds = %91, %88
br label %136
136: ; preds = %135
%137 = load i32, i32* %10
%138 = add nsw i32 %137, -1
store i32 %138, i32* %10
br label %64
139: ; preds = %64
%140 = load i32, i32* %11
%141 = icmp sgt i32 %140, 1
br i1 %141, label %142, label %165
142: ; preds = %139
%143 = load i32, i32* %11
%144 = load double**, double*** %14
%145 = call i32 (i32, double**, ...) bitcast (i32 (...)* @regression_lineaire to i32 (i32, double**, ...)*)(i32 %143, double** %144)
%146 = sitofp i32 %145 to double
%147 = load double*, double** %8
%148 = load i32, i32* %12
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds double, double* %147, i64 %149
store double %146, double* %150
%151 = load double*, double** %8
%152 = load i32, i32* %12
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds double, double* %151, i64 %153
%155 = load double, double* %154
%156 = fcmp ogt double %155, 1.000000e+00
br i1 %156, label %157, label %162
157: ; preds = %142
%158 = load double*, double** %8
%159 = load i32, i32* %12
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds double, double* %158, i64 %160
store double 1.000000e+00, double* %161
br label %162
162: ; preds = %157, %142
%163 = load i32, i32* %12
%164 = add nsw i32 %163, 1
store i32 %164, i32* %12
br label %165
165: ; preds = %162, %139
br label %166
166: ; preds = %165
%167 = load i32, i32* %9
%168 = add nsw i32 %167, 1
store i32 %168, i32* %9
br label %48
169: ; preds = %48
%170 = load i32, i32* %12
%171 = load i32*, i32** %7
store i32 %170, i32* %171
store i32 0, i32* %9
br label %172
172: ; preds = %184, %169
%173 = load i32, i32* %9
%174 = load i32, i32* %5
%175 = sub nsw i32 %174, 1
%176 = icmp slt i32 %173, %175
br i1 %176, label %177, label %187
177: ; preds = %172
%178 = load double**, double*** %14
%179 = load i32, i32* %9
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds double*, double** %178, i64 %180
%182 = load double*, double** %181
%183 = bitcast double* %182 to i8*
br label %184
184: ; preds = %177
%185 = load i32, i32* %9
%186 = add nsw i32 %185, 1
store i32 %186, i32* %9
br label %172
187: ; preds = %172
%188 = load double**, double*** %14
%189 = bitcast double** %188 to i8*
ret void
}

LLVM IR (-O2):
define void @calcul_exposants_Holder(i32 %0, double* nocapture %1, i32* nocapture writeonly %2, double* nocapture writeonly %3) {
%5 = add nsw i32 %0, -1
%6 = sext i32 %5 to i64
%7 = shl nsw i64 %6, 3
%8 = tail call i8* @malloc(i64 %7)
%9 = bitcast i8* %8 to double**
%10 = icmp sgt i32 %0, 1
br i1 %10, label %11, label %93
11: ; preds = %4
%12 = zext i32 %5 to i64
br label %13
13: ; preds = %11, %13
%14 = phi i64 [ 0, %11 ], [ %18, %13 ]
%15 = tail call dereferenceable_or_null(16) i8* @malloc(i64 16)
%16 = getelementptr inbounds double*, double** %9, i64 %14
%17 = bitcast double** %16 to i8**
store i8* %15, i8** %17
%18 = add nuw nsw i64 %14, 1
%19 = icmp eq i64 %18, %12
br i1 %19, label %20, label %13
20: ; preds = %13
%21 = load double, double* %1
%22 = getelementptr inbounds double, double* %1, i64 %6
%23 = load double, double* %22
%24 = fsub double %21, %23
br i1 %10, label %25, label %93
25: ; preds = %20
%26 = zext i32 %5 to i64
br label %27
27: ; preds = %25, %89
%28 = phi i64 [ 0, %25 ], [ %91, %89 ]
%29 = phi i32 [ 0, %25 ], [ %90, %89 ]
%30 = trunc i64 %28 to i32
%31 = sub nsw i32 %0, %30
%32 = sitofp i32 %31 to double
%33 = tail call double @log(double %32)
%34 = fdiv double %33, 0x3FE62E42FEFA39EF
%35 = tail call double @llvm.floor.f64(double %34)
%36 = fptosi double %35 to i32
%37 = icmp sgt i32 %36, 0
br i1 %37, label %38, label %89
38: ; preds = %27
%39 = getelementptr inbounds double, double* %1, i64 %28
%40 = trunc i64 %28 to i32
%41 = add i32 %40, -1
br label %42
42: ; preds = %38, %75
%43 = phi i32 [ %36, %38 ], [ %77, %75 ]
%44 = phi i32 [ %36, %38 ], [ %76, %75 ]
%45 = load double, double* %39
%46 = tail call double @ldexp(double 1.000000e+00, i32 %43)
%47 = fptosi double %46 to i32
%48 = add i32 %41, %47
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds double, double* %1, i64 %49
%51 = load double, double* %50
%52 = fsub double %45, %51
%53 = fdiv double %52, %24
%54 = fcmp olt double %53, 0x3EB0C6F7A0B5ED8D
br i1 %54, label %55, label %57
55: ; preds = %42
%56 = add nsw i32 %44, -1
br label %75
57: ; preds = %42
%58 = load double, double* %39
%59 = tail call double @ldexp(double 1.000000e+00, i32 %43)
%60 = fptosi double %59 to i32
%61 = add i32 %41, %60
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %1, i64 %62
%64 = load double, double* %63
%65 = fsub double %58, %64
%66 = fdiv double %65, %24
%67 = tail call double @log(double %66)
%68 = sub nsw i32 %44, %43
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double*, double** %9, i64 %69
%71 = load double*, double** %70
%72 = getelementptr inbounds double, double* %71, i64 1
store double %67, double* %72
%73 = sitofp i32 %68 to double
%74 = fmul double %73, 0xBFE62E42FEFA39EF
store double %74, double* %71
br label %75
75: ; preds = %55, %57
%76 = phi i32 [ %56, %55 ], [ %44, %57 ]
%77 = add nsw i32 %43, -1
%78 = icmp sgt i32 %43, 1
br i1 %78, label %42, label %79
79: ; preds = %75
%80 = icmp sgt i32 %76, 1
br i1 %80, label %81, label %89
81: ; preds = %79
%82 = tail call i32 (i32, double**, ...) bitcast (i32 (...)* @regression_lineaire to i32 (i32, double**, ...)*)(i32 %76, double** %9)
%83 = sext i32 %29 to i64
%84 = getelementptr inbounds double, double* %3, i64 %83
%85 = icmp slt i32 %82, 1
%86 = select i1 %85, i32 %82, i32 1
%87 = sitofp i32 %86 to double
store double %87, double* %84
%88 = add nsw i32 %29, 1
br label %89
89: ; preds = %27, %79, %81
%90 = phi i32 [ %88, %81 ], [ %29, %79 ], [ %29, %27 ]
%91 = add nuw nsw i64 %28, 1
%92 = icmp eq i64 %91, %26
br i1 %92, label %94, label %27
93: ; preds = %20, %4
store i32 0, i32* %2
br label %104
94: ; preds = %89
store i32 %90, i32* %2
br i1 %10, label %95, label %104
95: ; preds = %94
%96 = zext i32 %5 to i64
br label %97
97: ; preds = %95, %97
%98 = phi i64 [ 0, %95 ], [ %102, %97 ]
%99 = getelementptr inbounds double*, double** %9, i64 %98
%100 = bitcast double** %99 to i8**
%101 = load i8*, i8** %100
tail call void @free(i8* %101)
%102 = add nuw nsw i64 %98, 1
%103 = icmp eq i64 %102, %96
br i1 %103, label %104, label %97
104: ; preds = %97, %93, %94
tail call void @free(i8* %8)
ret void
}