int main() {
  double **matriz;
  double x = 0.91;
  double sol;
  double a = -1;
  double b = 1;
  int npartes;
  int FIL;
  int COL;
  int i;
  printf("solucion real)\n\nsol: %lf\n\n", 10 * fabs(x));
  printf("apartado a)\n");
  npartes = 10;
  FIL = npartes + 1;
  COL = npartes + 2;
  matriz = (double **)malloc(FIL * sizeof(double *));
  for (i = 0; i < COL; i++)
    matriz[i] = (double *)malloc(COL * sizeof(double));
  iniMatriz(matriz, a, b, npartes, FIL, COL);
  f1(matriz, FIL, COL);
  sol = Px(matriz, x, FIL, COL);
  printf("\nsol: %lf\n\n", sol);
  for (i = 0; i < FIL; i++)
    free(matriz[i]);
  free(matriz);
  printf("apartado b)\n");
  npartes = 20;
  FIL = npartes + 1;
  COL = npartes + 2;
  matriz = (double **)malloc(FIL * sizeof(double *));
  for (i = 0; i < COL; i++)
    matriz[i] = (double *)malloc(COL * sizeof(double));
  iniMatriz(matriz, a, b, npartes, FIL, COL);
  f1(matriz, FIL, COL);
  sol = Px(matriz, x, FIL, COL);
  printf("\nsol: %lf\n\n", sol);
  for (i = 0; i < FIL; i++)
    free(matriz[i]);
  free(matriz);
  system("PAUSE");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
movsd  0xe91(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe7c(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe67(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm1
movaps 0xe6e(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xe42(%rip),%xmm0
mulsd  %xmm1,%xmm0
lea    0xe67(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
lea    0xe74(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0xa,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x3c(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x3,%rdi
call   1090 <malloc@plt>
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1245 <main+0xd5>
movslq -0x3c(%rbp),%rdi
shl    $0x3,%rdi
call   1090 <malloc@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    120f <main+0x9f>
mov    -0x10(%rbp),%rdi
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mov    -0x34(%rbp),%esi
mov    -0x38(%rbp),%edx
mov    -0x3c(%rbp),%ecx
mov    $0x2,%al
call   1070 <iniMatriz@plt>
mov    -0x10(%rbp),%rdi
mov    -0x38(%rbp),%esi
mov    -0x3c(%rbp),%edx
mov    $0x0,%al
call   1080 <f1@plt>
mov    -0x10(%rbp),%rdi
movsd  -0x18(%rbp),%xmm0
mov    -0x38(%rbp),%esi
mov    -0x3c(%rbp),%edx
mov    $0x1,%al
call   1060 <Px@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
lea    0xda0(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    12d8 <main+0x168>
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    12ad <main+0x13d>
mov    -0x10(%rbp),%rdi
call   1030 <free@plt>
lea    0xd70(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x14,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x3c(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x3,%rdi
call   1090 <malloc@plt>
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1356 <main+0x1e6>
movslq -0x3c(%rbp),%rdi
shl    $0x3,%rdi
call   1090 <malloc@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1320 <main+0x1b0>
mov    -0x10(%rbp),%rdi
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mov    -0x34(%rbp),%esi
mov    -0x38(%rbp),%edx
mov    -0x3c(%rbp),%ecx
mov    $0x2,%al
call   1070 <iniMatriz@plt>
mov    -0x10(%rbp),%rdi
mov    -0x38(%rbp),%esi
mov    -0x3c(%rbp),%edx
mov    $0x0,%al
call   1080 <f1@plt>
mov    -0x10(%rbp),%rdi
movsd  -0x18(%rbp),%xmm0
mov    -0x38(%rbp),%esi
mov    -0x3c(%rbp),%edx
mov    $0x1,%al
call   1060 <Px@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
lea    0xc8f(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    13e9 <main+0x279>
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    13be <main+0x24e>
mov    -0x10(%rbp),%rdi
call   1030 <free@plt>
lea    0xc6c(%rip),%rdi
mov    $0x0,%al
call   1040 <system@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
lea    0xe95(%rip),%rdi
movsd  0xe6d(%rip),%xmm0
mov    $0x1,%al
call   1060 <printf@plt>
lea    0xea0(%rip),%rdi
call   1040 <puts@plt>
mov    $0x58,%edi
call   10a0 <malloc@plt>
mov    %rax,%rbx
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x8(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x10(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x18(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x20(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x28(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x30(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x38(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x40(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x48(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x50(%rbx)
mov    $0x60,%edi
call   10a0 <malloc@plt>
mov    %rax,0x58(%rbx)
movsd  0xda6(%rip),%xmm0
movsd  0xda6(%rip),%xmm1
mov    %rbx,%rdi
mov    $0xa,%esi
mov    $0xb,%edx
mov    $0xc,%ecx
mov    $0x2,%al
call   1080 <iniMatriz@plt>
mov    %rbx,%rdi
mov    $0xb,%esi
mov    $0xc,%edx
xor    %eax,%eax
call   1090 <f1@plt>
movsd  0xd79(%rip),%xmm0
mov    %rbx,%rdi
mov    $0xb,%esi
mov    $0xc,%edx
mov    $0x1,%al
call   1070 <Px@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
lea    0xd6e(%rip),%r14
mov    %r14,%rdi
mov    $0x1,%al
call   1060 <printf@plt>
mov    (%rbx),%rdi
call   1030 <free@plt>
mov    0x8(%rbx),%rdi
call   1030 <free@plt>
mov    0x10(%rbx),%rdi
call   1030 <free@plt>
mov    0x18(%rbx),%rdi
call   1030 <free@plt>
mov    0x20(%rbx),%rdi
call   1030 <free@plt>
mov    0x28(%rbx),%rdi
call   1030 <free@plt>
mov    0x30(%rbx),%rdi
call   1030 <free@plt>
mov    0x38(%rbx),%rdi
call   1030 <free@plt>
mov    0x40(%rbx),%rdi
call   1030 <free@plt>
mov    0x48(%rbx),%rdi
call   1030 <free@plt>
mov    0x50(%rbx),%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
lea    0xd11(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa8,%edi
call   10a0 <malloc@plt>
mov    %rax,%rbx
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x8(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x10(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x18(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x20(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x28(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x30(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x38(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x40(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x48(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x50(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x58(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x60(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x68(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x70(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x78(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x80(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x88(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x90(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0x98(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0xa0(%rbx)
mov    $0xb0,%edi
call   10a0 <malloc@plt>
mov    %rax,0xa8(%rbx)
mov    %rbx,%rdi
movsd  0xb6a(%rip),%xmm0
movsd  0xb6a(%rip),%xmm1
mov    $0x14,%esi
mov    $0x15,%edx
mov    $0x16,%ecx
mov    $0x2,%al
call   1080 <iniMatriz@plt>
mov    %rbx,%rdi
mov    $0x15,%esi
mov    $0x16,%edx
xor    %eax,%eax
call   1090 <f1@plt>
mov    %rbx,%rdi
movsd  0xb3d(%rip),%xmm0
mov    $0x15,%esi
mov    $0x16,%edx
mov    $0x1,%al
call   1070 <Px@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1060 <printf@plt>
mov    (%rbx),%rdi
call   1030 <free@plt>
mov    0x8(%rbx),%rdi
call   1030 <free@plt>
mov    0x10(%rbx),%rdi
call   1030 <free@plt>
mov    0x18(%rbx),%rdi
call   1030 <free@plt>
mov    0x20(%rbx),%rdi
call   1030 <free@plt>
mov    0x28(%rbx),%rdi
call   1030 <free@plt>
mov    0x30(%rbx),%rdi
call   1030 <free@plt>
mov    0x38(%rbx),%rdi
call   1030 <free@plt>
mov    0x40(%rbx),%rdi
call   1030 <free@plt>
mov    0x48(%rbx),%rdi
call   1030 <free@plt>
mov    0x50(%rbx),%rdi
call   1030 <free@plt>
mov    0x58(%rbx),%rdi
call   1030 <free@plt>
mov    0x60(%rbx),%rdi
call   1030 <free@plt>
mov    0x68(%rbx),%rdi
call   1030 <free@plt>
mov    0x70(%rbx),%rdi
call   1030 <free@plt>
mov    0x78(%rbx),%rdi
call   1030 <free@plt>
mov    0x80(%rbx),%rdi
call   1030 <free@plt>
mov    0x88(%rbx),%rdi
call   1030 <free@plt>
mov    0x90(%rbx),%rdi
call   1030 <free@plt>
mov    0x98(%rbx),%rdi
call   1030 <free@plt>
mov    0xa0(%rbx),%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
lea    0xa64(%rip),%rdi
xor    %eax,%eax
call   1050 <system@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [27 x i8] c"solucion real)\0A\0Asol: %lf\0A\0A\00"
@.str.1 = [13 x i8] c"apartado a)\0A\00"
@.str.2 = [12 x i8] c"\0Asol: %lf\0A\0A\00"
@.str.3 = [13 x i8] c"apartado b)\0A\00"
@.str.4 = [6 x i8] c"PAUSE\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca double**
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 0, i32* %1
store double 9.100000e-01, double* %3
store double -1.000000e+00, double* %5
store double 1.000000e+00, double* %6
%11 = load double, double* %3
%12 = call double @llvm.fabs.f64(double %11)
%13 = fmul double 1.000000e+01, %12
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str, i64 0, i64 0), double %13)
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
store i32 10, i32* %7
%16 = load i32, i32* %7
%17 = add nsw i32 %16, 1
store i32 %17, i32* %8
%18 = load i32, i32* %7
%19 = add nsw i32 %18, 2
store i32 %19, i32* %9
%20 = load i32, i32* %8
%21 = sext i32 %20 to i64
%22 = mul i64 %21, 8
%23 = call i8* @malloc(i64 %22)
%24 = bitcast i8* %23 to double**
store double** %24, double*** %2
store i32 0, i32* %10
br label %25
25: ; preds = %39, %0
%26 = load i32, i32* %10
%27 = load i32, i32* %9
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %42
29: ; preds = %25
%30 = load i32, i32* %9
%31 = sext i32 %30 to i64
%32 = mul i64 %31, 8
%33 = call i8* @malloc(i64 %32)
%34 = bitcast i8* %33 to double*
%35 = load double**, double*** %2
%36 = load i32, i32* %10
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds double*, double** %35, i64 %37
store double* %34, double** %38
br label %39
39: ; preds = %29
%40 = load i32, i32* %10
%41 = add nsw i32 %40, 1
store i32 %41, i32* %10
br label %25
42: ; preds = %25
%43 = load double**, double*** %2
%44 = load double, double* %5
%45 = load double, double* %6
%46 = load i32, i32* %7
%47 = load i32, i32* %8
%48 = load i32, i32* %9
%49 = call i32 (double**, double, double, i32, i32, i32, ...) bitcast (i32 (...)* @iniMatriz to i32 (double**, double, double, i32, i32, i32, ...)*)(double** %43, double %44, double %45, i32 %46, i32 %47, i32 %48)
%50 = load double**, double*** %2
%51 = load i32, i32* %8
%52 = load i32, i32* %9
%53 = call i32 (double**, i32, i32, ...) bitcast (i32 (...)* @f1 to i32 (double**, i32, i32, ...)*)(double** %50, i32 %51, i32 %52)
%54 = load double**, double*** %2
%55 = load double, double* %3
%56 = load i32, i32* %8
%57 = load i32, i32* %9
%58 = call i32 (double**, double, i32, i32, ...) bitcast (i32 (...)* @Px to i32 (double**, double, i32, i32, ...)*)(double** %54, double %55, i32 %56, i32 %57)
%59 = sitofp i32 %58 to double
store double %59, double* %4
%60 = load double, double* %4
%61 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), double %60)
store i32 0, i32* %10
br label %62
62: ; preds = %73, %42
%63 = load i32, i32* %10
%64 = load i32, i32* %8
%65 = icmp slt i32 %63, %64
br i1 %65, label %66, label %76
66: ; preds = %62
%67 = load double**, double*** %2
%68 = load i32, i32* %10
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds double*, double** %67, i64 %69
%71 = load double*, double** %70
%72 = bitcast double* %71 to i8*
br label %73
73: ; preds = %66
%74 = load i32, i32* %10
%75 = add nsw i32 %74, 1
store i32 %75, i32* %10
br label %62
76: ; preds = %62
%77 = load double**, double*** %2
%78 = bitcast double** %77 to i8*
%79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i64 0, i64 0))
store i32 20, i32* %7
%80 = load i32, i32* %7
%81 = add nsw i32 %80, 1
store i32 %81, i32* %8
%82 = load i32, i32* %7
%83 = add nsw i32 %82, 2
store i32 %83, i32* %9
%84 = load i32, i32* %8
%85 = sext i32 %84 to i64
%86 = mul i64 %85, 8
%87 = call i8* @malloc(i64 %86)
%88 = bitcast i8* %87 to double**
store double** %88, double*** %2
store i32 0, i32* %10
br label %89
89: ; preds = %103, %76
%90 = load i32, i32* %10
%91 = load i32, i32* %9
%92 = icmp slt i32 %90, %91
br i1 %92, label %93, label %106
93: ; preds = %89
%94 = load i32, i32* %9
%95 = sext i32 %94 to i64
%96 = mul i64 %95, 8
%97 = call i8* @malloc(i64 %96)
%98 = bitcast i8* %97 to double*
%99 = load double**, double*** %2
%100 = load i32, i32* %10
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds double*, double** %99, i64 %101
store double* %98, double** %102
br label %103
103: ; preds = %93
%104 = load i32, i32* %10
%105 = add nsw i32 %104, 1
store i32 %105, i32* %10
br label %89
106: ; preds = %89
%107 = load double**, double*** %2
%108 = load double, double* %5
%109 = load double, double* %6
%110 = load i32, i32* %7
%111 = load i32, i32* %8
%112 = load i32, i32* %9
%113 = call i32 (double**, double, double, i32, i32, i32, ...) bitcast (i32 (...)* @iniMatriz to i32 (double**, double, double, i32, i32, i32, ...)*)(double** %107, double %108, double %109, i32 %110, i32 %111, i32 %112)
%114 = load double**, double*** %2
%115 = load i32, i32* %8
%116 = load i32, i32* %9
%117 = call i32 (double**, i32, i32, ...) bitcast (i32 (...)* @f1 to i32 (double**, i32, i32, ...)*)(double** %114, i32 %115, i32 %116)
%118 = load double**, double*** %2
%119 = load double, double* %3
%120 = load i32, i32* %8
%121 = load i32, i32* %9
%122 = call i32 (double**, double, i32, i32, ...) bitcast (i32 (...)* @Px to i32 (double**, double, i32, i32, ...)*)(double** %118, double %119, i32 %120, i32 %121)
%123 = sitofp i32 %122 to double
store double %123, double* %4
%124 = load double, double* %4
%125 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), double %124)
store i32 0, i32* %10
br label %126
126: ; preds = %137, %106
%127 = load i32, i32* %10
%128 = load i32, i32* %8
%129 = icmp slt i32 %127, %128
br i1 %129, label %130, label %140
130: ; preds = %126
%131 = load double**, double*** %2
%132 = load i32, i32* %10
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds double*, double** %131, i64 %133
%135 = load double*, double** %134
%136 = bitcast double* %135 to i8*
br label %137
137: ; preds = %130
%138 = load i32, i32* %10
%139 = add nsw i32 %138, 1
store i32 %139, i32* %10
br label %126
140: ; preds = %126
%141 = load double**, double*** %2
%142 = bitcast double** %141 to i8*
%143 = call i32 (i8*, ...) bitcast (i32 (...)* @system to i32 (i8*, ...)*)(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str = [27 x i8] c"solucion real)\0A\0Asol: %lf\0A\0A\00"
@.str.2 = [12 x i8] c"\0Asol: %lf\0A\0A\00"
@.str.4 = [6 x i8] c"PAUSE\00"
@str = [12 x i8] c"apartado a)\00"
@str.5 = [12 x i8] c"apartado b)\00"
define i32 @main() {
%1 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str, i64 0, i64 0), double 9.100000e+00)
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str, i64 0, i64 0))
%3 = tail call dereferenceable_or_null(88) i8* @malloc(i64 88)
%4 = bitcast i8* %3 to double**
%5 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%6 = bitcast i8* %3 to i8**
store i8* %5, i8** %6
%7 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%8 = getelementptr inbounds double*, double** %4, i64 1
%9 = bitcast double** %8 to i8**
store i8* %7, i8** %9
%10 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%11 = getelementptr inbounds double*, double** %4, i64 2
%12 = bitcast double** %11 to i8**
store i8* %10, i8** %12
%13 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%14 = getelementptr inbounds double*, double** %4, i64 3
%15 = bitcast double** %14 to i8**
store i8* %13, i8** %15
%16 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%17 = getelementptr inbounds double*, double** %4, i64 4
%18 = bitcast double** %17 to i8**
store i8* %16, i8** %18
%19 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%20 = getelementptr inbounds double*, double** %4, i64 5
%21 = bitcast double** %20 to i8**
store i8* %19, i8** %21
%22 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%23 = getelementptr inbounds double*, double** %4, i64 6
%24 = bitcast double** %23 to i8**
store i8* %22, i8** %24
%25 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%26 = getelementptr inbounds double*, double** %4, i64 7
%27 = bitcast double** %26 to i8**
store i8* %25, i8** %27
%28 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%29 = getelementptr inbounds double*, double** %4, i64 8
%30 = bitcast double** %29 to i8**
store i8* %28, i8** %30
%31 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%32 = getelementptr inbounds double*, double** %4, i64 9
%33 = bitcast double** %32 to i8**
store i8* %31, i8** %33
%34 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%35 = getelementptr inbounds double*, double** %4, i64 10
%36 = bitcast double** %35 to i8**
store i8* %34, i8** %36
%37 = tail call dereferenceable_or_null(96) i8* @malloc(i64 96)
%38 = getelementptr inbounds double*, double** %4, i64 11
%39 = bitcast double** %38 to i8**
store i8* %37, i8** %39
%40 = tail call i32 (double**, double, double, i32, i32, i32, ...) bitcast (i32 (...)* @iniMatriz to i32 (double**, double, double, i32, i32, i32, ...)*)(double** %4, double -1.000000e+00, double 1.000000e+00, i32 10, i32 11, i32 12)
%41 = tail call i32 (double**, i32, i32, ...) bitcast (i32 (...)* @f1 to i32 (double**, i32, i32, ...)*)(double** %4, i32 11, i32 12)
%42 = tail call i32 (double**, double, i32, i32, ...) bitcast (i32 (...)* @Px to i32 (double**, double, i32, i32, ...)*)(double** %4, double 9.100000e-01, i32 11, i32 12)
%43 = sitofp i32 %42 to double
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), double %43)
%45 = load i8*, i8** %6
tail call void @free(i8* %45)
%46 = load i8*, i8** %9
tail call void @free(i8* %46)
%47 = load i8*, i8** %12
tail call void @free(i8* %47)
%48 = load i8*, i8** %15
tail call void @free(i8* %48)
%49 = load i8*, i8** %18
tail call void @free(i8* %49)
%50 = load i8*, i8** %21
tail call void @free(i8* %50)
%51 = load i8*, i8** %24
tail call void @free(i8* %51)
%52 = load i8*, i8** %27
tail call void @free(i8* %52)
%53 = load i8*, i8** %30
tail call void @free(i8* %53)
%54 = load i8*, i8** %33
tail call void @free(i8* %54)
%55 = load i8*, i8** %36
tail call void @free(i8* %55)
tail call void @free(i8* %3)
%56 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.5, i64 0, i64 0))
%57 = tail call dereferenceable_or_null(168) i8* @malloc(i64 168)
%58 = bitcast i8* %57 to double**
%59 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%60 = bitcast i8* %57 to i8**
store i8* %59, i8** %60
%61 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%62 = getelementptr inbounds double*, double** %58, i64 1
%63 = bitcast double** %62 to i8**
store i8* %61, i8** %63
%64 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%65 = getelementptr inbounds double*, double** %58, i64 2
%66 = bitcast double** %65 to i8**
store i8* %64, i8** %66
%67 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%68 = getelementptr inbounds double*, double** %58, i64 3
%69 = bitcast double** %68 to i8**
store i8* %67, i8** %69
%70 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%71 = getelementptr inbounds double*, double** %58, i64 4
%72 = bitcast double** %71 to i8**
store i8* %70, i8** %72
%73 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%74 = getelementptr inbounds double*, double** %58, i64 5
%75 = bitcast double** %74 to i8**
store i8* %73, i8** %75
%76 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%77 = getelementptr inbounds double*, double** %58, i64 6
%78 = bitcast double** %77 to i8**
store i8* %76, i8** %78
%79 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%80 = getelementptr inbounds double*, double** %58, i64 7
%81 = bitcast double** %80 to i8**
store i8* %79, i8** %81
%82 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%83 = getelementptr inbounds double*, double** %58, i64 8
%84 = bitcast double** %83 to i8**
store i8* %82, i8** %84
%85 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%86 = getelementptr inbounds double*, double** %58, i64 9
%87 = bitcast double** %86 to i8**
store i8* %85, i8** %87
%88 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%89 = getelementptr inbounds double*, double** %58, i64 10
%90 = bitcast double** %89 to i8**
store i8* %88, i8** %90
%91 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%92 = getelementptr inbounds double*, double** %58, i64 11
%93 = bitcast double** %92 to i8**
store i8* %91, i8** %93
%94 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%95 = getelementptr inbounds double*, double** %58, i64 12
%96 = bitcast double** %95 to i8**
store i8* %94, i8** %96
%97 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%98 = getelementptr inbounds double*, double** %58, i64 13
%99 = bitcast double** %98 to i8**
store i8* %97, i8** %99
%100 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%101 = getelementptr inbounds double*, double** %58, i64 14
%102 = bitcast double** %101 to i8**
store i8* %100, i8** %102
%103 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%104 = getelementptr inbounds double*, double** %58, i64 15
%105 = bitcast double** %104 to i8**
store i8* %103, i8** %105
%106 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%107 = getelementptr inbounds double*, double** %58, i64 16
%108 = bitcast double** %107 to i8**
store i8* %106, i8** %108
%109 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%110 = getelementptr inbounds double*, double** %58, i64 17
%111 = bitcast double** %110 to i8**
store i8* %109, i8** %111
%112 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%113 = getelementptr inbounds double*, double** %58, i64 18
%114 = bitcast double** %113 to i8**
store i8* %112, i8** %114
%115 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%116 = getelementptr inbounds double*, double** %58, i64 19
%117 = bitcast double** %116 to i8**
store i8* %115, i8** %117
%118 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%119 = getelementptr inbounds double*, double** %58, i64 20
%120 = bitcast double** %119 to i8**
store i8* %118, i8** %120
%121 = tail call dereferenceable_or_null(176) i8* @malloc(i64 176)
%122 = getelementptr inbounds double*, double** %58, i64 21
%123 = bitcast double** %122 to i8**
store i8* %121, i8** %123
%124 = tail call i32 (double**, double, double, i32, i32, i32, ...) bitcast (i32 (...)* @iniMatriz to i32 (double**, double, double, i32, i32, i32, ...)*)(double** %58, double -1.000000e+00, double 1.000000e+00, i32 20, i32 21, i32 22)
%125 = tail call i32 (double**, i32, i32, ...) bitcast (i32 (...)* @f1 to i32 (double**, i32, i32, ...)*)(double** %58, i32 21, i32 22)
%126 = tail call i32 (double**, double, i32, i32, ...) bitcast (i32 (...)* @Px to i32 (double**, double, i32, i32, ...)*)(double** %58, double 9.100000e-01, i32 21, i32 22)
%127 = sitofp i32 %126 to double
%128 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), double %127)
%129 = load i8*, i8** %60
tail call void @free(i8* %129)
%130 = load i8*, i8** %63
tail call void @free(i8* %130)
%131 = load i8*, i8** %66
tail call void @free(i8* %131)
%132 = load i8*, i8** %69
tail call void @free(i8* %132)
%133 = load i8*, i8** %72
tail call void @free(i8* %133)
%134 = load i8*, i8** %75
tail call void @free(i8* %134)
%135 = load i8*, i8** %78
tail call void @free(i8* %135)
%136 = load i8*, i8** %81
tail call void @free(i8* %136)
%137 = load i8*, i8** %84
tail call void @free(i8* %137)
%138 = load i8*, i8** %87
tail call void @free(i8* %138)
%139 = load i8*, i8** %90
tail call void @free(i8* %139)
%140 = load i8*, i8** %93
tail call void @free(i8* %140)
%141 = load i8*, i8** %96
tail call void @free(i8* %141)
%142 = load i8*, i8** %99
tail call void @free(i8* %142)
%143 = load i8*, i8** %102
tail call void @free(i8* %143)
%144 = load i8*, i8** %105
tail call void @free(i8* %144)
%145 = load i8*, i8** %108
tail call void @free(i8* %145)
%146 = load i8*, i8** %111
tail call void @free(i8* %146)
%147 = load i8*, i8** %114
tail call void @free(i8* %147)
%148 = load i8*, i8** %117
tail call void @free(i8* %148)
%149 = load i8*, i8** %120
tail call void @free(i8* %149)
tail call void @free(i8* %57)
%150 = tail call i32 (i8*, ...) bitcast (i32 (...)* @system to i32 (i8*, ...)*)(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
ret i32 0
}