fix arrays reading in C, add type Real for double or float
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 10 Feb 2017 15:28:24 +0000 (16:28 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 10 Feb 2017 15:28:24 +0000 (16:28 +0100)
20 files changed:
src/sources/EMGLLF.c
src/sources/EMGLLF.h
src/sources/EMGrank.c
src/sources/EMGrank.h
src/sources/constructionModelesLassoMLE.c
src/sources/constructionModelesLassoMLE.h
src/sources/constructionModelesLassoRank.c
src/sources/constructionModelesLassoRank.h
src/sources/selectiontotale.c
src/sources/selectiontotale.h
src/sources/utils.h
src/test/Makefile
src/test/OUT [new file with mode: 0644]
src/test/test.ConstructionModelesLassoMLE.c
src/test/test.EMGLLF.c
src/test/test.EMGrank.c
src/test/test.constructionModelesLassoRank.c
src/test/test.selectiontotale.c
src/test/test_utils.c [moved from src/test/utils.c with 91% similarity]
src/test/test_utils.h [moved from src/test/utils.h with 100% similarity]

index 1439416..087116b 100644 (file)
@@ -5,23 +5,23 @@
 // TODO: don't recompute indexes every time......
 void EMGLLF_core(
        // IN parameters
 // TODO: don't recompute indexes every time......
 void EMGLLF_core(
        // IN parameters
-       const float* phiInit, // parametre initial de moyenne renormalisé
-       const float* rhoInit, // parametre initial de variance renormalisé
-       const float* piInit,     // parametre initial des proportions
-       const float* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
+       const Real* phiInit, // parametre initial de moyenne renormalisé
+       const Real* rhoInit, // parametre initial de variance renormalisé
+       const Real* piInit,      // parametre initial des proportions
+       const Real* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
        int mini, // nombre minimal d'itérations dans l'algorithme EM
        int maxi, // nombre maximal d'itérations dans l'algorithme EM
        int mini, // nombre minimal d'itérations dans l'algorithme EM
        int maxi, // nombre maximal d'itérations dans l'algorithme EM
-       float gamma, // puissance des proportions dans la pénalisation pour un Lasso adaptatif
-       float lambda, // valeur du paramètre de régularisation du Lasso
-       const float* X, // régresseurs
-       const float* Y, // réponse
-       float tau, // seuil pour accepter la convergence
+       Real gamma, // puissance des proportions dans la pénalisation pour un Lasso adaptatif
+       Real lambda, // valeur du paramètre de régularisation du Lasso
+       const Real* X, // régresseurs
+       const Real* Y, // réponse
+       Real tau, // seuil pour accepter la convergence
        // OUT parameters (all pointers, to be modified)
        // OUT parameters (all pointers, to be modified)
-       float* phi, // parametre de moyenne renormalisé, calculé par l'EM
-       float* rho, // parametre de variance renormalisé, calculé par l'EM
-       float* pi, // parametre des proportions renormalisé, calculé par l'EM
-       float* LLF, // log vraisemblance associée à cet échantillon, pour les valeurs estimées des paramètres
-       float* S,
+       Real* phi, // parametre de moyenne renormalisé, calculé par l'EM
+       Real* rho, // parametre de variance renormalisé, calculé par l'EM
+       Real* pi, // parametre des proportions renormalisé, calculé par l'EM
+       Real* LLF, // log vraisemblance associée à cet échantillon, pour les valeurs estimées des paramètres
+       Real* S,
        // additional size parameters
        int n, // nombre d'echantillons
        int p, // nombre de covariables
        // additional size parameters
        int n, // nombre d'echantillons
        int p, // nombre de covariables
@@ -37,32 +37,32 @@ void EMGLLF_core(
 
        //Other local variables
        //NOTE: variables order is always [maxi],n,p,m,k
 
        //Other local variables
        //NOTE: variables order is always [maxi],n,p,m,k
-       float* gam = (float*)malloc(n*k*sizeof(float));
+       Real* gam = (Real*)malloc(n*k*sizeof(Real));
        copyArray(gamInit, gam, n*k);
        copyArray(gamInit, gam, n*k);
-       float* b = (float*)malloc(k*sizeof(float));
-       float* Phi = (float*)malloc(p*m*k*sizeof(float));
-       float* Rho = (float*)malloc(m*m*k*sizeof(float));
-       float* Pi = (float*)malloc(k*sizeof(float));
-       float* gam2 = (float*)malloc(k*sizeof(float));
-       float* pi2 = (float*)malloc(k*sizeof(float));
-       float* Gram2 = (float*)malloc(p*p*k*sizeof(float));
-       float* ps = (float*)malloc(m*k*sizeof(float));
-       float* nY2 = (float*)malloc(m*k*sizeof(float));
-       float* ps1 = (float*)malloc(n*m*k*sizeof(float));
-       float* ps2 = (float*)malloc(p*m*k*sizeof(float));
-       float* nY21 = (float*)malloc(n*m*k*sizeof(float));
-       float* Gam = (float*)malloc(n*k*sizeof(float));
-       float* X2 = (float*)malloc(n*p*k*sizeof(float));
-       float* Y2 = (float*)malloc(n*m*k*sizeof(float));
+       Real* b = (Real*)malloc(k*sizeof(Real));
+       Real* Phi = (Real*)malloc(p*m*k*sizeof(Real));
+       Real* Rho = (Real*)malloc(m*m*k*sizeof(Real));
+       Real* Pi = (Real*)malloc(k*sizeof(Real));
+       Real* gam2 = (Real*)malloc(k*sizeof(Real));
+       Real* pi2 = (Real*)malloc(k*sizeof(Real));
+       Real* Gram2 = (Real*)malloc(p*p*k*sizeof(Real));
+       Real* ps = (Real*)malloc(m*k*sizeof(Real));
+       Real* nY2 = (Real*)malloc(m*k*sizeof(Real));
+       Real* ps1 = (Real*)malloc(n*m*k*sizeof(Real));
+       Real* ps2 = (Real*)malloc(p*m*k*sizeof(Real));
+       Real* nY21 = (Real*)malloc(n*m*k*sizeof(Real));
+       Real* Gam = (Real*)malloc(n*k*sizeof(Real));
+       Real* X2 = (Real*)malloc(n*p*k*sizeof(Real));
+       Real* Y2 = (Real*)malloc(n*m*k*sizeof(Real));
        gsl_matrix* matrix = gsl_matrix_alloc(m, m);
        gsl_permutation* permutation = gsl_permutation_alloc(m);
        gsl_matrix* matrix = gsl_matrix_alloc(m, m);
        gsl_permutation* permutation = gsl_permutation_alloc(m);
-       float* YiRhoR = (float*)malloc(m*sizeof(float));
-       float* XiPhiR = (float*)malloc(m*sizeof(float));
-       float dist = 0.;
-       float dist2 = 0.;
+       Real* YiRhoR = (Real*)malloc(m*sizeof(Real));
+       Real* XiPhiR = (Real*)malloc(m*sizeof(Real));
+       Real dist = 0.;
+       Real dist2 = 0.;
        int ite = 0;
        int ite = 0;
-       float EPS = 1e-15;
-       float* dotProducts = (float*)malloc(k*sizeof(float));
+       Real EPS = 1e-15;
+       Real* dotProducts = (Real*)malloc(k*sizeof(Real));
 
        while (ite < mini || (ite < maxi && (dist >= tau || dist2 >= sqrt(tau))))
        {
 
        while (ite < mini || (ite < maxi && (dist >= tau || dist2 >= sqrt(tau))))
        {
@@ -90,7 +90,7 @@ void EMGLLF_core(
                                //ps2(:,mm,r)=transpose(X2(:,:,r))*Y2(:,mm,r);
                                for (int u=0; u<p; u++)
                                {
                                //ps2(:,mm,r)=transpose(X2(:,:,r))*Y2(:,mm,r);
                                for (int u=0; u<p; u++)
                                {
-                                       float dotProduct = 0.;
+                                       Real dotProduct = 0.;
                                        for (int v=0; v<n; v++)
                                                dotProduct += X2[ai(v,u,r,n,m,k)] * Y2[ai(v,mm,r,n,m,k)];
                                        ps2[ai(u,mm,r,n,m,k)] = dotProduct;
                                        for (int v=0; v<n; v++)
                                                dotProduct += X2[ai(v,u,r,n,m,k)] * Y2[ai(v,mm,r,n,m,k)];
                                        ps2[ai(u,mm,r,n,m,k)] = dotProduct;
@@ -101,7 +101,7 @@ void EMGLLF_core(
                                for (int s=0; s<p; s++)
                                {
                                        //Gram2(j,s,r)=transpose(X2(:,j,r))*(X2(:,s,r));
                                for (int s=0; s<p; s++)
                                {
                                        //Gram2(j,s,r)=transpose(X2(:,j,r))*(X2(:,s,r));
-                                       float dotProduct = 0.;
+                                       Real dotProduct = 0.;
                                        for (int u=0; u<n; u++)
                                                dotProduct += X2[ai(u,j,r,n,p,k)] * X2[ai(u,s,r,n,p,k)];
                                        Gram2[ai(j,s,r,p,p,k)] = dotProduct;
                                        for (int u=0; u<n; u++)
                                                dotProduct += X2[ai(u,j,r,n,p,k)] * X2[ai(u,s,r,n,p,k)];
                                        Gram2[ai(j,s,r,p,p,k)] = dotProduct;
@@ -117,7 +117,7 @@ void EMGLLF_core(
                for (int r=0; r<k; r++)
                {
                        //b(r) = sum(sum(abs(phi(:,:,r))));
                for (int r=0; r<k; r++)
                {
                        //b(r) = sum(sum(abs(phi(:,:,r))));
-                       float sumAbsPhi = 0.;
+                       Real sumAbsPhi = 0.;
                        for (int u=0; u<p; u++)
                                for (int v=0; v<m; v++)
                                        sumAbsPhi += fabs(phi[ai(u,v,r,p,m,k)]);
                        for (int u=0; u<p; u++)
                                for (int v=0; v<m; v++)
                                        sumAbsPhi += fabs(phi[ai(u,v,r,p,m,k)]);
@@ -126,16 +126,16 @@ void EMGLLF_core(
                //gam2 = sum(gam,1);
                for (int u=0; u<k; u++)
                {
                //gam2 = sum(gam,1);
                for (int u=0; u<k; u++)
                {
-                       float sumOnColumn = 0.;
+                       Real sumOnColumn = 0.;
                        for (int v=0; v<n; v++)
                                sumOnColumn += gam[mi(v,u,n,k)];
                        gam2[u] = sumOnColumn;
                }
                //a=sum(gam*transpose(log(pi)));
                        for (int v=0; v<n; v++)
                                sumOnColumn += gam[mi(v,u,n,k)];
                        gam2[u] = sumOnColumn;
                }
                //a=sum(gam*transpose(log(pi)));
-               float a = 0.;
+               Real a = 0.;
                for (int u=0; u<n; u++)
                {
                for (int u=0; u<n; u++)
                {
-                       float dotProduct = 0.;
+                       Real dotProduct = 0.;
                        for (int v=0; v<k; v++)
                                dotProduct += gam[mi(u,v,n,k)] * log(pi[v]);
                        a += dotProduct;
                        for (int v=0; v<k; v++)
                                dotProduct += gam[mi(u,v,n,k)] * log(pi[v]);
                        a += dotProduct;
@@ -144,7 +144,7 @@ void EMGLLF_core(
                //tant que les proportions sont negatives
                int kk = 0;
                int pi2AllPositive = 0;
                //tant que les proportions sont negatives
                int kk = 0;
                int pi2AllPositive = 0;
-               float invN = 1./n;
+               Real invN = 1./n;
                while (!pi2AllPositive)
                {
                        //pi2(:)=pi(:)+0.1^kk*(1/n*gam2(:)-pi(:));
                while (!pi2AllPositive)
                {
                        //pi2(:)=pi(:)+0.1^kk*(1/n*gam2(:)-pi(:));
@@ -164,15 +164,15 @@ void EMGLLF_core(
 
                //t(m) la plus grande valeur dans la grille O.1^k tel que ce soit décroissante ou constante
                //(pi.^gamma)*b
 
                //t(m) la plus grande valeur dans la grille O.1^k tel que ce soit décroissante ou constante
                //(pi.^gamma)*b
-               float piPowGammaDotB = 0.;
+               Real piPowGammaDotB = 0.;
                for (int v=0; v<k; v++)
                        piPowGammaDotB += pow(pi[v],gamma) * b[v];
                //(pi2.^gamma)*b
                for (int v=0; v<k; v++)
                        piPowGammaDotB += pow(pi[v],gamma) * b[v];
                //(pi2.^gamma)*b
-               float pi2PowGammaDotB = 0.;
+               Real pi2PowGammaDotB = 0.;
                for (int v=0; v<k; v++)
                        pi2PowGammaDotB += pow(pi2[v],gamma) * b[v];
                //transpose(gam2)*log(pi2)
                for (int v=0; v<k; v++)
                        pi2PowGammaDotB += pow(pi2[v],gamma) * b[v];
                //transpose(gam2)*log(pi2)
-               float prodGam2logPi2 = 0.;
+               Real prodGam2logPi2 = 0.;
                for (int v=0; v<k; v++)
                        prodGam2logPi2 += gam2[v] * log(pi2[v]);
                while (-invN*a + lambda*piPowGammaDotB < -invN*prodGam2logPi2 + lambda*pi2PowGammaDotB
                for (int v=0; v<k; v++)
                        prodGam2logPi2 += gam2[v] * log(pi2[v]);
                while (-invN*a + lambda*piPowGammaDotB < -invN*prodGam2logPi2 + lambda*pi2PowGammaDotB
@@ -190,9 +190,9 @@ void EMGLLF_core(
                                prodGam2logPi2 += gam2[v] * log(pi2[v]);
                        kk++;
                }
                                prodGam2logPi2 += gam2[v] * log(pi2[v]);
                        kk++;
                }
-               float t = pow(0.1,kk);
+               Real t = pow(0.1,kk);
                //sum(pi+t*(pi2-pi))
                //sum(pi+t*(pi2-pi))
-               float sumPiPlusTbyDiff = 0.;
+               Real sumPiPlusTbyDiff = 0.;
                for (int v=0; v<k; v++)
                        sumPiPlusTbyDiff += (pi[v] + t*(pi2[v] - pi[v]));
                //pi=(pi+t*(pi2-pi))/sum(pi+t*(pi2-pi));
                for (int v=0; v<k; v++)
                        sumPiPlusTbyDiff += (pi[v] + t*(pi2[v] - pi[v]));
                //pi=(pi+t*(pi2-pi))/sum(pi+t*(pi2-pi));
@@ -207,7 +207,7 @@ void EMGLLF_core(
                                for (int i=0; i<n; i++)
                                {
                                        //< X2(i,:,r) , phi(:,mm,r) >
                                for (int i=0; i<n; i++)
                                {
                                        //< X2(i,:,r) , phi(:,mm,r) >
-                                       float dotProduct = 0.0;
+                                       Real dotProduct = 0.0;
                                        for (int u=0; u<p; u++)
                                                dotProduct += X2[ai(i,u,r,n,p,k)] * phi[ai(u,mm,r,n,m,k)];
                                        //ps1(i,mm,r)=Y2(i,mm,r)*dot(X2(i,:,r),phi(:,mm,r));
                                        for (int u=0; u<p; u++)
                                                dotProduct += X2[ai(i,u,r,n,p,k)] * phi[ai(u,mm,r,n,m,k)];
                                        //ps1(i,mm,r)=Y2(i,mm,r)*dot(X2(i,:,r),phi(:,mm,r));
@@ -215,12 +215,12 @@ void EMGLLF_core(
                                        nY21[ai(i,mm,r,n,m,k)] = Y2[ai(i,mm,r,n,m,k)] * Y2[ai(i,mm,r,n,m,k)];
                                }
                                //ps(mm,r)=sum(ps1(:,mm,r));
                                        nY21[ai(i,mm,r,n,m,k)] = Y2[ai(i,mm,r,n,m,k)] * Y2[ai(i,mm,r,n,m,k)];
                                }
                                //ps(mm,r)=sum(ps1(:,mm,r));
-                               float sumPs1 = 0.0;
+                               Real sumPs1 = 0.0;
                                for (int u=0; u<n; u++)
                                        sumPs1 += ps1[ai(u,mm,r,n,m,k)];
                                ps[mi(mm,r,m,k)] = sumPs1;
                                //nY2(mm,r)=sum(nY21(:,mm,r));
                                for (int u=0; u<n; u++)
                                        sumPs1 += ps1[ai(u,mm,r,n,m,k)];
                                ps[mi(mm,r,m,k)] = sumPs1;
                                //nY2(mm,r)=sum(nY21(:,mm,r));
-                               float sumNy21 = 0.0;
+                               Real sumNy21 = 0.0;
                                for (int u=0; u<n; u++)
                                        sumNy21 += nY21[ai(u,mm,r,n,m,k)];
                                nY2[mi(mm,r,m,k)] = sumNy21;
                                for (int u=0; u<n; u++)
                                        sumNy21 += nY21[ai(u,mm,r,n,m,k)];
                                nY2[mi(mm,r,m,k)] = sumNy21;
@@ -237,7 +237,7 @@ void EMGLLF_core(
                                {
                                        //sum(phi(1:j-1,mm,r).*transpose(Gram2(j,1:j-1,r)))+sum(phi(j+1:p,mm,r)
                                        // .*transpose(Gram2(j,j+1:p,r)))
                                {
                                        //sum(phi(1:j-1,mm,r).*transpose(Gram2(j,1:j-1,r)))+sum(phi(j+1:p,mm,r)
                                        // .*transpose(Gram2(j,j+1:p,r)))
-                                       float dotPhiGram2 = 0.0;
+                                       Real dotPhiGram2 = 0.0;
                                        for (int u=0; u<j; u++)
                                                dotPhiGram2 += phi[ai(u,mm,r,p,m,k)] * Gram2[ai(j,u,r,p,p,k)];
                                        for (int u=j+1; u<p; u++)
                                        for (int u=0; u<j; u++)
                                                dotPhiGram2 += phi[ai(u,mm,r,p,m,k)] * Gram2[ai(j,u,r,p,p,k)];
                                        for (int u=j+1; u<p; u++)
@@ -262,12 +262,12 @@ void EMGLLF_core(
                /////////////
 
                int signum;
                /////////////
 
                int signum;
-               float sumLogLLF2 = 0.0;
+               Real sumLogLLF2 = 0.0;
                for (int i=0; i<n; i++)
                {
                for (int i=0; i<n; i++)
                {
-                       float sumLLF1 = 0.0;
-                       float sumGamI = 0.0;
-                       float minDotProduct = INFINITY;
+                       Real sumLLF1 = 0.0;
+                       Real sumGamI = 0.0;
+                       Real minDotProduct = INFINITY;
 
                        for (int r=0; r<k; r++)
                        {
 
                        for (int r=0; r<k; r++)
                        {
@@ -300,7 +300,7 @@ void EMGLLF_core(
                                if (dotProducts[r] < minDotProduct)
                                        minDotProduct = dotProducts[r];
                        }
                                if (dotProducts[r] < minDotProduct)
                                        minDotProduct = dotProducts[r];
                        }
-                       float shift = 0.5*minDotProduct;
+                       Real shift = 0.5*minDotProduct;
                        for (int r=0; r<k; r++)
                        {
                                //compute det(rho(:,:,r)) [TODO: avoid re-computations]
                        for (int r=0; r<k; r++)
                        {
                                //compute det(rho(:,:,r)) [TODO: avoid re-computations]
@@ -310,7 +310,7 @@ void EMGLLF_core(
                                                matrix->data[u*m+v] = rho[ai(u,v,r,m,m,k)];
                                }
                                gsl_linalg_LU_decomp(matrix, permutation, &signum);
                                                matrix->data[u*m+v] = rho[ai(u,v,r,m,m,k)];
                                }
                                gsl_linalg_LU_decomp(matrix, permutation, &signum);
-                               float detRhoR = gsl_linalg_LU_det(matrix, signum);
+                               Real detRhoR = gsl_linalg_LU_det(matrix, signum);
 
                                Gam[mi(i,r,n,k)] = pi[r] * detRhoR * exp(-0.5*dotProducts[r] + shift);
                                sumLLF1 += Gam[mi(i,r,n,k)] / pow(2*M_PI,m/2.0);
 
                                Gam[mi(i,r,n,k)] = pi[r] * detRhoR * exp(-0.5*dotProducts[r] + shift);
                                sumLLF1 += Gam[mi(i,r,n,k)] / pow(2*M_PI,m/2.0);
@@ -327,7 +327,7 @@ void EMGLLF_core(
                }
                
                //sum(pen(ite,:))
                }
                
                //sum(pen(ite,:))
-               float sumPen = 0.0;
+               Real sumPen = 0.0;
                for (int r=0; r<k; r++)
                        sumPen += pow(pi[r],gamma) * b[r];
                //LLF(ite)=-1/n*sum(log(LLF2(ite,:)))+lambda*sum(pen(ite,:));
                for (int r=0; r<k; r++)
                        sumPen += pow(pi[r],gamma) * b[r];
                //LLF(ite)=-1/n*sum(log(LLF2(ite,:)))+lambda*sum(pen(ite,:));
@@ -338,14 +338,14 @@ void EMGLLF_core(
                        dist = (LLF[ite] - LLF[ite-1]) / (1.0 + fabs(LLF[ite]));
                
                //Dist1=max(max((abs(phi-Phi))./(1+abs(phi))));
                        dist = (LLF[ite] - LLF[ite-1]) / (1.0 + fabs(LLF[ite]));
                
                //Dist1=max(max((abs(phi-Phi))./(1+abs(phi))));
-               float Dist1 = 0.0;
+               Real Dist1 = 0.0;
                for (int u=0; u<p; u++)
                {
                        for (int v=0; v<m; v++)
                        {
                                for (int w=0; w<k; w++)
                                {
                for (int u=0; u<p; u++)
                {
                        for (int v=0; v<m; v++)
                        {
                                for (int w=0; w<k; w++)
                                {
-                                       float tmpDist = fabs(phi[ai(u,v,w,p,m,k)]-Phi[ai(u,v,w,p,m,k)]) 
+                                       Real tmpDist = fabs(phi[ai(u,v,w,p,m,k)]-Phi[ai(u,v,w,p,m,k)]) 
                                                / (1.0+fabs(phi[ai(u,v,w,p,m,k)]));
                                        if (tmpDist > Dist1)
                                                Dist1 = tmpDist;
                                                / (1.0+fabs(phi[ai(u,v,w,p,m,k)]));
                                        if (tmpDist > Dist1)
                                                Dist1 = tmpDist;
@@ -353,14 +353,14 @@ void EMGLLF_core(
                        }
                }
                //Dist2=max(max((abs(rho-Rho))./(1+abs(rho))));
                        }
                }
                //Dist2=max(max((abs(rho-Rho))./(1+abs(rho))));
-               float Dist2 = 0.0;
+               Real Dist2 = 0.0;
                for (int u=0; u<m; u++)
                {
                        for (int v=0; v<m; v++)
                        {
                                for (int w=0; w<k; w++)
                                {
                for (int u=0; u<m; u++)
                {
                        for (int v=0; v<m; v++)
                        {
                                for (int w=0; w<k; w++)
                                {
-                                       float tmpDist = fabs(rho[ai(u,v,w,m,m,k)]-Rho[ai(u,v,w,m,m,k)]) 
+                                       Real tmpDist = fabs(rho[ai(u,v,w,m,m,k)]-Rho[ai(u,v,w,m,m,k)]) 
                                                / (1.0+fabs(rho[ai(u,v,w,m,m,k)]));
                                        if (tmpDist > Dist2)
                                                Dist2 = tmpDist;
                                                / (1.0+fabs(rho[ai(u,v,w,m,m,k)]));
                                        if (tmpDist > Dist2)
                                                Dist2 = tmpDist;
@@ -368,12 +368,12 @@ void EMGLLF_core(
                        }
                }
                //Dist3=max(max((abs(pi-Pi))./(1+abs(Pi))));
                        }
                }
                //Dist3=max(max((abs(pi-Pi))./(1+abs(Pi))));
-               float Dist3 = 0.0;
+               Real Dist3 = 0.0;
                for (int u=0; u<n; u++)
                {
                        for (int v=0; v<k; v++)
                        {
                for (int u=0; u<n; u++)
                {
                        for (int v=0; v<k; v++)
                        {
-                               float tmpDist = fabs(pi[v]-Pi[v]) / (1.0+fabs(pi[v]));
+                               Real tmpDist = fabs(pi[v]-Pi[v]) / (1.0+fabs(pi[v]));
                                if (tmpDist > Dist3)
                                        Dist3 = tmpDist;
                        }
                                if (tmpDist > Dist3)
                                        Dist3 = tmpDist;
                        }
index 005c05b..8f375ff 100644 (file)
@@ -1,25 +1,27 @@
 #ifndef valse_EMGLLF_H
 #define valse_EMGLLF_H
 
 #ifndef valse_EMGLLF_H
 #define valse_EMGLLF_H
 
+#include "utils.h"
+
 void EMGLLF_core(
        // IN parameters
 void EMGLLF_core(
        // IN parameters
-       const float* phiInit,
-       const float* rhoInit,
-       const float* piInit,
-       const float* gamInit,
+       const Real* phiInit,
+       const Real* rhoInit,
+       const Real* piInit,
+       const Real* gamInit,
        int mini,
        int maxi,
        int mini,
        int maxi,
-       float gamma,
-       float lambda,
-       const float* X,
-       const float* Y,
-       float tau,
+       Real gamma,
+       Real lambda,
+       const Real* X,
+       const Real* Y,
+       Real tau,
        // OUT parameters
        // OUT parameters
-       float* phi,
-       float* rho,
-       float* pi,
-       float* LLF,
-       float* S,
+       Real* phi,
+       Real* rho,
+       Real* pi,
+       Real* LLF,
+       Real* S,
        // additional size parameters
        int n,
        int p,
        // additional size parameters
        int n,
        int p,
index 3d5a9c7..2422fc0 100644 (file)
@@ -3,13 +3,13 @@
 #include "utils.h"
 
 // Compute pseudo-inverse of a square matrix
 #include "utils.h"
 
 // Compute pseudo-inverse of a square matrix
-static float* pinv(const float* matrix, int dim)
+static Real* pinv(const Real* matrix, int dim)
 {
        gsl_matrix* U = gsl_matrix_alloc(dim,dim);
        gsl_matrix* V = gsl_matrix_alloc(dim,dim);
        gsl_vector* S = gsl_vector_alloc(dim);
        gsl_vector* work = gsl_vector_alloc(dim);
 {
        gsl_matrix* U = gsl_matrix_alloc(dim,dim);
        gsl_matrix* V = gsl_matrix_alloc(dim,dim);
        gsl_vector* S = gsl_vector_alloc(dim);
        gsl_vector* work = gsl_vector_alloc(dim);
-       float EPS = 1e-10; //threshold for singular value "== 0"
+       Real EPS = 1e-10; //threshold for singular value "== 0"
        
        //copy matrix into U
        copyArray(matrix, U->data, dim*dim);
        
        //copy matrix into U
        copyArray(matrix, U->data, dim*dim);
@@ -19,12 +19,12 @@ static float* pinv(const float* matrix, int dim)
        gsl_vector_free(work);
 
        // Obtain pseudo-inverse by V*S^{-1}*t(U)
        gsl_vector_free(work);
 
        // Obtain pseudo-inverse by V*S^{-1}*t(U)
-       float* inverse = (float*)malloc(dim*dim*sizeof(float));
+       Real* inverse = (Real*)malloc(dim*dim*sizeof(Real));
        for (int i=0; i<dim; i++)
        {
                for (int ii=0; ii<dim; ii++)
                {
        for (int i=0; i<dim; i++)
        {
                for (int ii=0; ii<dim; ii++)
                {
-                       float dotProduct = 0.0;
+                       Real dotProduct = 0.0;
                        for (int j=0; j<dim; j++)
                                dotProduct += V->data[i*dim+j] * (S->data[j] > EPS ? 1.0/S->data[j] : 0.0) * U->data[ii*dim+j];
                        inverse[i*dim+ii] = dotProduct;
                        for (int j=0; j<dim; j++)
                                dotProduct += V->data[i*dim+j] * (S->data[j] > EPS ? 1.0/S->data[j] : 0.0) * U->data[ii*dim+j];
                        inverse[i*dim+ii] = dotProduct;
@@ -40,17 +40,17 @@ static float* pinv(const float* matrix, int dim)
 // TODO: comment EMGrank purpose
 void EMGrank_core(
        // IN parameters
 // TODO: comment EMGrank purpose
 void EMGrank_core(
        // IN parameters
-       const float* Pi, // parametre de proportion
-       const float* Rho, // parametre initial de variance renormalisé
+       const Real* Pi, // parametre de proportion
+       const Real* Rho, // parametre initial de variance renormalisé
        int mini, // nombre minimal d'itérations dans l'algorithme EM
        int maxi, // nombre maximal d'itérations dans l'algorithme EM
        int mini, // nombre minimal d'itérations dans l'algorithme EM
        int maxi, // nombre maximal d'itérations dans l'algorithme EM
-       const float* X, // régresseurs
-       const float* Y, // réponse
-       float tau, // seuil pour accepter la convergence
+       const Real* X, // régresseurs
+       const Real* Y, // réponse
+       Real tau, // seuil pour accepter la convergence
        const int* rank, // vecteur des rangs possibles
        // OUT parameters
        const int* rank, // vecteur des rangs possibles
        // OUT parameters
-       float* phi, // parametre de moyenne renormalisé, calculé par l'EM
-       float* LLF, // log vraisemblance associé à cet échantillon, pour les valeurs estimées des paramètres
+       Real* phi, // parametre de moyenne renormalisé, calculé par l'EM
+       Real* LLF, // log vraisemblance associé à cet échantillon, pour les valeurs estimées des paramètres
        // additional size parameters
        int n, // taille de l'echantillon
        int p, // nombre de covariables
        // additional size parameters
        int n, // taille de l'echantillon
        int p, // nombre de covariables
@@ -58,20 +58,20 @@ void EMGrank_core(
        int k) // nombre de composantes
 {
        // Allocations, initializations
        int k) // nombre de composantes
 {
        // Allocations, initializations
-       float* Phi = (float*)calloc(p*m*k,sizeof(float));
-       float* hatBetaR = (float*)malloc(p*m*sizeof(float));
+       Real* Phi = (Real*)calloc(p*m*k,sizeof(Real));
+       Real* hatBetaR = (Real*)malloc(p*m*sizeof(Real));
        int signum;
        int signum;
-       float invN = 1.0/n;
+       Real invN = 1.0/n;
        int deltaPhiBufferSize = 20;
        int deltaPhiBufferSize = 20;
-       float* deltaPhi = (float*)malloc(deltaPhiBufferSize*sizeof(float));
+       Real* deltaPhi = (Real*)malloc(deltaPhiBufferSize*sizeof(Real));
        int ite = 0;
        int ite = 0;
-       float sumDeltaPhi = 0.0;
-       float* YiRhoR = (float*)malloc(m*sizeof(float));
-       float* XiPhiR = (float*)malloc(m*sizeof(float));
-       float* Xr = (float*)malloc(n*p*sizeof(float));
-       float* Yr = (float*)malloc(n*m*sizeof(float));
-       float* tXrXr = (float*)malloc(p*p*sizeof(float));
-       float* tXrYr = (float*)malloc(p*m*sizeof(float));
+       Real sumDeltaPhi = 0.0;
+       Real* YiRhoR = (Real*)malloc(m*sizeof(Real));
+       Real* XiPhiR = (Real*)malloc(m*sizeof(Real));
+       Real* Xr = (Real*)malloc(n*p*sizeof(Real));
+       Real* Yr = (Real*)malloc(n*m*sizeof(Real));
+       Real* tXrXr = (Real*)malloc(p*p*sizeof(Real));
+       Real* tXrYr = (Real*)malloc(p*m*sizeof(Real));
        gsl_matrix* matrixM = gsl_matrix_alloc(p, m);
        gsl_matrix* matrixE = gsl_matrix_alloc(m, m);
        gsl_permutation* permutation = gsl_permutation_alloc(m);
        gsl_matrix* matrixM = gsl_matrix_alloc(p, m);
        gsl_matrix* matrixE = gsl_matrix_alloc(m, m);
        gsl_permutation* permutation = gsl_permutation_alloc(m);
@@ -115,7 +115,7 @@ void EMGrank_core(
                        {
                                for (int jj=0; jj<p; jj++)
                                {
                        {
                                for (int jj=0; jj<p; jj++)
                                {
-                                       float dotProduct = 0.0;
+                                       Real dotProduct = 0.0;
                                        for (int u=0; u<cardClustR; u++)
                                                dotProduct += Xr[mi(u,j,n,p)] * Xr[mi(u,jj,n,p)];
                                        tXrXr[mi(j,jj,p,p)] = dotProduct;
                                        for (int u=0; u<cardClustR; u++)
                                                dotProduct += Xr[mi(u,j,n,p)] * Xr[mi(u,jj,n,p)];
                                        tXrXr[mi(j,jj,p,p)] = dotProduct;
@@ -123,14 +123,14 @@ void EMGrank_core(
                        }
 
                        //Get pseudo inverse = (t(Xr)*Xr)^{-1}
                        }
 
                        //Get pseudo inverse = (t(Xr)*Xr)^{-1}
-                       float* invTXrXr = pinv(tXrXr, p);
+                       Real* invTXrXr = pinv(tXrXr, p);
                        
                        // Compute tXrYr = t(Xr) * Yr
                        for (int j=0; j<p; j++)
                        {
                                for (int jj=0; jj<m; jj++)
                                {
                        
                        // Compute tXrYr = t(Xr) * Yr
                        for (int j=0; j<p; j++)
                        {
                                for (int jj=0; jj<m; jj++)
                                {
-                                       float dotProduct = 0.0;
+                                       Real dotProduct = 0.0;
                                        for (int u=0; u<cardClustR; u++)
                                                dotProduct += Xr[mi(u,j,n,p)] * Yr[mi(u,j,n,m)];
                                        tXrYr[mi(j,jj,p,m)] = dotProduct;
                                        for (int u=0; u<cardClustR; u++)
                                                dotProduct += Xr[mi(u,j,n,p)] * Yr[mi(u,j,n,m)];
                                        tXrYr[mi(j,jj,p,m)] = dotProduct;
@@ -142,7 +142,7 @@ void EMGrank_core(
                        {
                                for (int jj=0; jj<m; jj++)
                                {
                        {
                                for (int jj=0; jj<m; jj++)
                                {
-                                       float dotProduct = 0.0;
+                                       Real dotProduct = 0.0;
                                        for (int u=0; u<p; u++)
                                                dotProduct += invTXrXr[mi(j,u,p,p)] * tXrYr[mi(u,jj,p,m)];
                                        matrixM->data[j*m+jj] = dotProduct;
                                        for (int u=0; u<p; u++)
                                                dotProduct += invTXrXr[mi(j,u,p,p)] * tXrYr[mi(u,jj,p,m)];
                                        matrixM->data[j*m+jj] = dotProduct;
@@ -159,12 +159,12 @@ void EMGrank_core(
                                S->data[j] = 0.0;
                        
                        //[intermediate step] Compute hatBetaR = U * S * t(V)
                                S->data[j] = 0.0;
                        
                        //[intermediate step] Compute hatBetaR = U * S * t(V)
-                       double* U = matrixM->data;
+                       double* U = matrixM->data; //GSL require double precision
                        for (int j=0; j<p; j++)
                        {
                                for (int jj=0; jj<m; jj++)
                                {
                        for (int j=0; j<p; j++)
                        {
                                for (int jj=0; jj<m; jj++)
                                {
-                                       float dotProduct = 0.0;
+                                       Real dotProduct = 0.0;
                                        for (int u=0; u<m; u++)
                                                dotProduct += U[j*m+u] * S->data[u] * V->data[jj*m+u];
                                        hatBetaR[mi(j,jj,p,m)] = dotProduct;
                                        for (int u=0; u<m; u++)
                                                dotProduct += U[j*m+u] * S->data[u] * V->data[jj*m+u];
                                        hatBetaR[mi(j,jj,p,m)] = dotProduct;
@@ -176,7 +176,7 @@ void EMGrank_core(
                        {
                                for (int jj=0; jj<m; jj++)
                                {
                        {
                                for (int jj=0; jj<m; jj++)
                                {
-                                       float dotProduct=0.0;
+                                       Real dotProduct=0.0;
                                        for (int u=0; u<m; u++)
                                                dotProduct += hatBetaR[mi(j,u,p,m)] * Rho[ai(u,jj,r,m,m,k)];
                                        phi[ai(j,jj,r,p,m,k)] = dotProduct;
                                        for (int u=0; u<m; u++)
                                                dotProduct += hatBetaR[mi(j,u,p,m)] * Rho[ai(u,jj,r,m,m,k)];
                                        phi[ai(j,jj,r,p,m,k)] = dotProduct;
@@ -188,11 +188,11 @@ void EMGrank_core(
                // Etape E //
                /////////////
                
                // Etape E //
                /////////////
                
-               float sumLogLLF2 = 0.0;
+               Real sumLogLLF2 = 0.0;
                for (int i=0; i<n; i++)
                {
                for (int i=0; i<n; i++)
                {
-                       float sumLLF1 = 0.0;
-                       float maxLogGamIR = -INFINITY;
+                       Real sumLLF1 = 0.0;
+                       Real maxLogGamIR = -INFINITY;
                        for (int r=0; r<k; r++)
                        {
                                //Compute
                        for (int r=0; r<k; r++)
                        {
                                //Compute
@@ -207,7 +207,7 @@ void EMGrank_core(
                                                matrixE->data[j*m+jj] = Rho[ai(j,jj,r,m,m,k)];
                                }
                                gsl_linalg_LU_decomp(matrixE, permutation, &signum);
                                                matrixE->data[j*m+jj] = Rho[ai(j,jj,r,m,m,k)];
                                }
                                gsl_linalg_LU_decomp(matrixE, permutation, &signum);
-                               float detRhoR = gsl_linalg_LU_det(matrixE, signum);
+                               Real detRhoR = gsl_linalg_LU_det(matrixE, signum);
 
                                //compute Y(i,:)*Rho(:,:,r)
                                for (int j=0; j<m; j++)
 
                                //compute Y(i,:)*Rho(:,:,r)
                                for (int j=0; j<m; j++)
@@ -226,10 +226,10 @@ void EMGrank_core(
                                }
 
                                //compute dotProduct < Y(:,i)*rho(:,:,r)-X(i,:)*phi(:,:,r) . Y(:,i)*rho(:,:,r)-X(i,:)*phi(:,:,r) >
                                }
 
                                //compute dotProduct < Y(:,i)*rho(:,:,r)-X(i,:)*phi(:,:,r) . Y(:,i)*rho(:,:,r)-X(i,:)*phi(:,:,r) >
-                               float dotProduct = 0.0;
+                               Real dotProduct = 0.0;
                                for (int u=0; u<m; u++)
                                        dotProduct += (YiRhoR[u]-XiPhiR[u]) * (YiRhoR[u]-XiPhiR[u]);
                                for (int u=0; u<m; u++)
                                        dotProduct += (YiRhoR[u]-XiPhiR[u]) * (YiRhoR[u]-XiPhiR[u]);
-                               float logGamIR = log(Pi[r]) + log(detRhoR) - 0.5*dotProduct;
+                               Real logGamIR = log(Pi[r]) + log(detRhoR) - 0.5*dotProduct;
 
                                //Z(i) = index of max (gam(i,:))
                                if (logGamIR > maxLogGamIR)
 
                                //Z(i) = index of max (gam(i,:))
                                if (logGamIR > maxLogGamIR)
@@ -247,14 +247,14 @@ void EMGrank_core(
                *LLF = -invN * sumLogLLF2;
 
                //newDeltaPhi = max(max((abs(phi-Phi))./(1+abs(phi))));
                *LLF = -invN * sumLogLLF2;
 
                //newDeltaPhi = max(max((abs(phi-Phi))./(1+abs(phi))));
-               float newDeltaPhi = 0.0;
+               Real newDeltaPhi = 0.0;
                for (int j=0; j<p; j++)
                {
                        for (int jj=0; jj<m; jj++)
                        {
                                for (int r=0; r<k; r++)
                                {
                for (int j=0; j<p; j++)
                {
                        for (int jj=0; jj<m; jj++)
                        {
                                for (int r=0; r<k; r++)
                                {
-                                       float tmpDist = fabs(phi[ai(j,jj,r,p,m,k)]-Phi[ai(j,jj,r,p,m,k)])
+                                       Real tmpDist = fabs(phi[ai(j,jj,r,p,m,k)]-Phi[ai(j,jj,r,p,m,k)])
                                                / (1.0+fabs(phi[ai(j,jj,r,p,m,k)]));
                                        if (tmpDist > newDeltaPhi)
                                                newDeltaPhi = tmpDist;
                                                / (1.0+fabs(phi[ai(j,jj,r,p,m,k)]));
                                        if (tmpDist > newDeltaPhi)
                                                newDeltaPhi = tmpDist;
index 92c3f73..b7367d8 100644 (file)
@@ -1,19 +1,21 @@
 #ifndef valse_EMGrank_H
 #define valse_EMGrank_H
 
 #ifndef valse_EMGrank_H
 #define valse_EMGrank_H
 
+#include "utils.h"
+
 void EMGrank_core(
        // IN parameters
 void EMGrank_core(
        // IN parameters
-       const float* Pi,
-       const float* Rho,
+       const Real* Pi,
+       const Real* Rho,
        int mini,
        int maxi,
        int mini,
        int maxi,
-       const float* X,
-       const float* Y,
-       float tau,
+       const Real* X,
+       const Real* Y,
+       Real tau,
        const int* rank,
        // OUT parameters
        const int* rank,
        // OUT parameters
-       float* phi,
-       float* LLF,
+       Real* phi,
+       Real* LLF,
        // additional size parameters
        int n,
        int p,
        // additional size parameters
        int n,
        int p,
index a48f7d0..6b92094 100644 (file)
@@ -7,25 +7,25 @@
 // TODO: comment on constructionModelesLassoMLE purpose
 void constructionModelesLassoMLE_core(
        // IN parameters
 // TODO: comment on constructionModelesLassoMLE purpose
 void constructionModelesLassoMLE_core(
        // IN parameters
-       const float* phiInit, // parametre initial de moyenne renormalisé
-       const float* rhoInit, // parametre initial de variance renormalisé
-       const float* piInit,// parametre initial des proportions
-       const float* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
+       const Real* phiInit, // parametre initial de moyenne renormalisé
+       const Real* rhoInit, // parametre initial de variance renormalisé
+       const Real* piInit,// parametre initial des proportions
+       const Real* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
        int mini,// nombre minimal d'itérations dans l'algorithme EM
        int maxi,// nombre maximal d'itérations dans l'algorithme EM
        int mini,// nombre minimal d'itérations dans l'algorithme EM
        int maxi,// nombre maximal d'itérations dans l'algorithme EM
-       float gamma,// valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif
-       const float* glambda, // valeur des paramètres de régularisation du Lasso
-       const float* X, // régresseurs
-       const float* Y, // réponse
-       float seuil,// seuil pour prendre en compte une variable
-       float tau,// seuil pour accepter la convergence
+       Real gamma,// valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif
+       const Real* glambda, // valeur des paramètres de régularisation du Lasso
+       const Real* X, // régresseurs
+       const Real* Y, // réponse
+       Real seuil,// seuil pour prendre en compte une variable
+       Real tau,// seuil pour accepter la convergence
        const int* A1, // matrice des coefficients des parametres selectionnes
        const int* A2, // matrice des coefficients des parametres non selectionnes
        // OUT parameters
        const int* A1, // matrice des coefficients des parametres selectionnes
        const int* A2, // matrice des coefficients des parametres non selectionnes
        // OUT parameters
-       float* phi,// estimateur ainsi calculé par le Lasso
-       float* rho,// estimateur ainsi calculé par le Lasso
-       float* pi, // estimateur ainsi calculé par le Lasso
-       float* lvraisemblance, // estimateur ainsi calculé par le Lasso
+       Real* phi,// estimateur ainsi calculé par le Lasso
+       Real* rho,// estimateur ainsi calculé par le Lasso
+       Real* pi, // estimateur ainsi calculé par le Lasso
+       Real* lvraisemblance, // estimateur ainsi calculé par le Lasso
        // additional size parameters
        int n, // taille de l'echantillon
        int p, // nombre de covariables
        // additional size parameters
        int n, // taille de l'echantillon
        int p, // nombre de covariables
@@ -58,7 +58,7 @@ void constructionModelesLassoMLE_core(
                        continue;
 
                //Xa = X(:,a)
                        continue;
 
                //Xa = X(:,a)
-               float* Xa = (float*)malloc(n*lengthA*sizeof(float));
+               Real* Xa = (Real*)malloc(n*lengthA*sizeof(Real));
                for (int i=0; i<n; i++)
                {
                        for (int j=0; j<lengthA; j++)
                for (int i=0; i<n; i++)
                {
                        for (int j=0; j<lengthA; j++)
@@ -66,7 +66,7 @@ void constructionModelesLassoMLE_core(
                }
 
                //phia = phiInit(a,:,:)
                }
 
                //phia = phiInit(a,:,:)
-               float* phia = (float*)malloc(lengthA*m*k*sizeof(float));
+               Real* phia = (Real*)malloc(lengthA*m*k*sizeof(Real));
                for (int j=0; j<lengthA; j++)
                {
                        for (int mm=0; mm<m; mm++)
                for (int j=0; j<lengthA; j++)
                {
                        for (int mm=0; mm<m; mm++)
@@ -78,11 +78,11 @@ void constructionModelesLassoMLE_core(
 
                //[phiLambda,rhoLambda,piLambda,~,~] = EMGLLF(...
                //      phiInit(a,:,:),rhoInit,piInit,gamInit,mini,maxi,gamma,0,X(:,a),Y,tau);
 
                //[phiLambda,rhoLambda,piLambda,~,~] = EMGLLF(...
                //      phiInit(a,:,:),rhoInit,piInit,gamInit,mini,maxi,gamma,0,X(:,a),Y,tau);
-               float* phiLambda = (float*)malloc(lengthA*m*k*sizeof(float));
-               float* rhoLambda = (float*)malloc(m*m*k*sizeof(float));
-               float* piLambda = (float*)malloc(k*sizeof(float));
-               float* LLF = (float*)malloc((maxi+1)*sizeof(float));
-               float* S = (float*)malloc(lengthA*m*k*sizeof(float));
+               Real* phiLambda = (Real*)malloc(lengthA*m*k*sizeof(Real));
+               Real* rhoLambda = (Real*)malloc(m*m*k*sizeof(Real));
+               Real* piLambda = (Real*)malloc(k*sizeof(Real));
+               Real* LLF = (Real*)malloc((maxi+1)*sizeof(Real));
+               Real* S = (Real*)malloc(lengthA*m*k*sizeof(Real));
                EMGLLF_core(phia,rhoInit,piInit,gamInit,mini,maxi,gamma,0.0,Xa,Y,tau,
                        phiLambda,rhoLambda,piLambda,LLF,S,
                        n,lengthA,m,k);
                EMGLLF_core(phia,rhoInit,piInit,gamInit,mini,maxi,gamma,0.0,Xa,Y,tau,
                        phiLambda,rhoLambda,piLambda,LLF,S,
                        n,lengthA,m,k);
@@ -154,12 +154,12 @@ void constructionModelesLassoMLE_core(
                free(b);
 
                int signum;
                free(b);
 
                int signum;
-               float* densite = (float*)calloc(L*n,sizeof(float));
-               float sumLogDensit = 0.0;
+               Real* densite = (Real*)calloc(L*n,sizeof(Real));
+               Real sumLogDensit = 0.0;
                gsl_matrix* matrix = gsl_matrix_alloc(m, m);
                gsl_permutation* permutation = gsl_permutation_alloc(m);
                gsl_matrix* matrix = gsl_matrix_alloc(m, m);
                gsl_permutation* permutation = gsl_permutation_alloc(m);
-               float* YiRhoR = (float*)malloc(m*sizeof(float));
-               float* XiPhiR = (float*)malloc(m*sizeof(float));
+               Real* YiRhoR = (Real*)malloc(m*sizeof(Real));
+               Real* XiPhiR = (Real*)malloc(m*sizeof(Real));
                for (int i=0; i<n; i++)
                {
                        //~ for r=1:k
                for (int i=0; i<n; i++)
                {
                        //~ for r=1:k
@@ -176,7 +176,7 @@ void constructionModelesLassoMLE_core(
                                                matrix->data[u*m+v] = rho[ai4(u,v,r,lambdaIndex,m,m,k,L)];
                                }
                                gsl_linalg_LU_decomp(matrix, permutation, &signum);
                                                matrix->data[u*m+v] = rho[ai4(u,v,r,lambdaIndex,m,m,k,L)];
                                }
                                gsl_linalg_LU_decomp(matrix, permutation, &signum);
-                               float detRhoR = gsl_linalg_LU_det(matrix, signum);
+                               Real detRhoR = gsl_linalg_LU_det(matrix, signum);
 
                                //compute Y(i,:)*rho(:,:,r,lambdaIndex)
                                for (int u=0; u<m; u++)
 
                                //compute Y(i,:)*rho(:,:,r,lambdaIndex)
                                for (int u=0; u<m; u++)
@@ -196,7 +196,7 @@ void constructionModelesLassoMLE_core(
                                // On peut remplacer X par Xa dans ce dernier calcul, mais je ne sais pas si c'est intéressant ...
 
                                // compute dotProduct < delta . delta >
                                // On peut remplacer X par Xa dans ce dernier calcul, mais je ne sais pas si c'est intéressant ...
 
                                // compute dotProduct < delta . delta >
-                               float dotProduct = 0.0;
+                               Real dotProduct = 0.0;
                                for (int u=0; u<m; u++)
                                        dotProduct += (YiRhoR[u]-XiPhiR[u]) * (YiRhoR[u]-XiPhiR[u]);
 
                                for (int u=0; u<m; u++)
                                        dotProduct += (YiRhoR[u]-XiPhiR[u]) * (YiRhoR[u]-XiPhiR[u]);
 
index 2058e48..992c2c7 100644 (file)
@@ -1,27 +1,29 @@
 #ifndef valse_constructionModelesLassoMLE_H
 #define valse_constructionModelesLassoMLE_H
 
 #ifndef valse_constructionModelesLassoMLE_H
 #define valse_constructionModelesLassoMLE_H
 
+#include "utils.h"
+
 void constructionModelesLassoMLE_core(
        // IN parameters
 void constructionModelesLassoMLE_core(
        // IN parameters
-       const float* phiInit,
-       const float* rhoInit,
-       const float* piInit,
-       const float* gamInit,
+       const Real* phiInit,
+       const Real* rhoInit,
+       const Real* piInit,
+       const Real* gamInit,
        int mini,
        int maxi,
        int mini,
        int maxi,
-       float gamma,
-       const float* glambda,
-       const float* X,
-       const float* Y,
-       float seuil,
-       float tau,
+       Real gamma,
+       const Real* glambda,
+       const Real* X,
+       const Real* Y,
+       Real seuil,
+       Real tau,
        const int* A1,
        const int* A2,
        // OUT parameters
        const int* A1,
        const int* A2,
        // OUT parameters
-       float* phi,
-       float* rho,
-       float* pi,
-       float* lvraisemblance,
+       Real* phi,
+       Real* rho,
+       Real* pi,
+       Real* lvraisemblance,
        // additional size parameters
        int n,
        int p,
        // additional size parameters
        int n,
        int p,
index 031e76c..8eee0eb 100644 (file)
@@ -7,19 +7,19 @@
 // TODO: comment on constructionModelesLassoRank purpose
 void constructionModelesLassoRank_core(
        // IN parameters
 // TODO: comment on constructionModelesLassoRank purpose
 void constructionModelesLassoRank_core(
        // IN parameters
-       const float* Pi,// parametre initial des proportions
-       const float* Rho, // parametre initial de variance renormalisé
+       const Real* Pi,// parametre initial des proportions
+       const Real* Rho, // parametre initial de variance renormalisé
        int mini, // nombre minimal d'itérations dans l'algorithme EM
        int maxi, // nombre maximal d'itérations dans l'algorithme EM
        int mini, // nombre minimal d'itérations dans l'algorithme EM
        int maxi, // nombre maximal d'itérations dans l'algorithme EM
-       const float* X,// régresseurs
-       const float* Y,// réponse
-       float tau, // seuil pour accepter la convergence
+       const Real* X,// régresseurs
+       const Real* Y,// réponse
+       Real tau, // seuil pour accepter la convergence
        const int* A1, // matrice des coefficients des parametres selectionnes
        int rangmin,    //rang minimum autorisé
        int rangmax,    //rang maximum autorisé
        // OUT parameters (all pointers, to be modified)
        const int* A1, // matrice des coefficients des parametres selectionnes
        int rangmin,    //rang minimum autorisé
        int rangmax,    //rang maximum autorisé
        // OUT parameters (all pointers, to be modified)
-       float* phi,// estimateur ainsi calculé par le Lasso
-       float* lvraisemblance,// estimateur ainsi calculé par le Lasso
+       Real* phi,// estimateur ainsi calculé par le Lasso
+       Real* lvraisemblance,// estimateur ainsi calculé par le Lasso
        // additional size parameters
        int n,// taille de l'echantillon
        int p,// nombre de covariables
        // additional size parameters
        int n,// taille de l'echantillon
        int p,// nombre de covariables
@@ -73,24 +73,24 @@ for (int r=0; r<k; r++)
                        continue;
 
                //from now on, longueurActive > 0
                        continue;
 
                //from now on, longueurActive > 0
-               float* phiLambda = (float*)malloc(longueurActive*m*k*sizeof(float));
-               float LLF;
+               Real* phiLambda = (Real*)malloc(longueurActive*m*k*sizeof(Real));
+               Real LLF;
                for (int j=0; j<Size; j++)
                {
                        //[phiLambda,LLF] = EMGrank(Pi(:,lambdaIndex),Rho(:,:,:,lambdaIndex),mini,maxi,X(:,active),Y,tau,Rank(j,:));
                        int* rank = (int*)malloc(k*sizeof(int));
                        for (int r=0; r<k; r++)
                                rank[r] = Rank[mi(j,r,Size,k)];
                for (int j=0; j<Size; j++)
                {
                        //[phiLambda,LLF] = EMGrank(Pi(:,lambdaIndex),Rho(:,:,:,lambdaIndex),mini,maxi,X(:,active),Y,tau,Rank(j,:));
                        int* rank = (int*)malloc(k*sizeof(int));
                        for (int r=0; r<k; r++)
                                rank[r] = Rank[mi(j,r,Size,k)];
-                       float* Xactive = (float*)malloc(n*longueurActive*sizeof(float));
+                       Real* Xactive = (Real*)malloc(n*longueurActive*sizeof(Real));
                        for (int i=0; i<n; i++)
                        {
                                for (int jj=0; jj<longueurActive; jj++)
                                        Xactive[mi(i,jj,n,longueurActive)] = X[mi(i,active[jj],n,p)];
                        }
                        for (int i=0; i<n; i++)
                        {
                                for (int jj=0; jj<longueurActive; jj++)
                                        Xactive[mi(i,jj,n,longueurActive)] = X[mi(i,active[jj],n,p)];
                        }
-                       float* PiLambda = (float*)malloc(k*sizeof(float));
+                       Real* PiLambda = (Real*)malloc(k*sizeof(Real));
                        for (int r=0; r<k; r++)
                                PiLambda[r] = Pi[mi(r,lambdaIndex,k,L)];
                        for (int r=0; r<k; r++)
                                PiLambda[r] = Pi[mi(r,lambdaIndex,k,L)];
-                       float* RhoLambda = (float*)malloc(m*m*k*sizeof(float));
+                       Real* RhoLambda = (Real*)malloc(m*m*k*sizeof(Real));
                        for (int u=0; u<m; u++)
                        {
                                for (int v=0; v<m; v++)
                        for (int u=0; u<m; u++)
                        {
                                for (int v=0; v<m; v++)
@@ -109,7 +109,7 @@ for (int r=0; r<k; r++)
                        //lvraisemblance((lambdaIndex-1)*Size+j,:) = [LLF, dot(Rank(j,:), length(active)-Rank(j,:)+m)];
                        lvraisemblance[mi(lambdaIndex*Size+j,0,L*Size,2)] = LLF;
                        //dot(Rank(j,:), length(active)-Rank(j,:)+m)
                        //lvraisemblance((lambdaIndex-1)*Size+j,:) = [LLF, dot(Rank(j,:), length(active)-Rank(j,:)+m)];
                        lvraisemblance[mi(lambdaIndex*Size+j,0,L*Size,2)] = LLF;
                        //dot(Rank(j,:), length(active)-Rank(j,:)+m)
-                       float dotProduct = 0.0;
+                       Real dotProduct = 0.0;
                        for (int r=0; r<k; r++)
                                dotProduct += Rank[mi(j,r,Size,k)] * (longueurActive-Rank[mi(j,r,Size,k)]+m);
                        lvraisemblance[mi(lambdaIndex*Size+j,1,Size*L,2)] = dotProduct;
                        for (int r=0; r<k; r++)
                                dotProduct += Rank[mi(j,r,Size,k)] * (longueurActive-Rank[mi(j,r,Size,k)]+m);
                        lvraisemblance[mi(lambdaIndex*Size+j,1,Size*L,2)] = dotProduct;
index 60f6623..91a71d8 100644 (file)
@@ -1,22 +1,24 @@
 #ifndef valse_constructionModelesLassoRank_H
 #define valse_constructionModelesLassoRank_H
 
 #ifndef valse_constructionModelesLassoRank_H
 #define valse_constructionModelesLassoRank_H
 
+#include "utils.h"
+
 // Main job on raw inputs (after transformation from mxArray)
 void constructionModelesLassoRank_core(
        // IN parameters
 // Main job on raw inputs (after transformation from mxArray)
 void constructionModelesLassoRank_core(
        // IN parameters
-       const float* Pi,
-       const float* Rho,
+       const Real* Pi,
+       const Real* Rho,
        int mini,
        int maxi,
        int mini,
        int maxi,
-       const float* X,
-       const float* Y,
-       float tau,
+       const Real* X,
+       const Real* Y,
+       Real tau,
        const int* A1,
        int rangmin,
        int rangmax,
        // OUT parameters
        const int* A1,
        int rangmin,
        int rangmax,
        // OUT parameters
-       float* phi,
-       float* lvraisemblance,
+       Real* phi,
+       Real* lvraisemblance,
        // additional size parameters
        int n,
        int p,
        // additional size parameters
        int n,
        int p,
index 3b2e015..8c1b768 100644 (file)
@@ -7,23 +7,23 @@
 // Main job on raw inputs (after transformation from mxArray)
 void selectiontotale_core(
        // IN parameters
 // Main job on raw inputs (after transformation from mxArray)
 void selectiontotale_core(
        // IN parameters
-       const float* phiInit, // parametre initial de moyenne renormalisé
-       const float* rhoInit, // parametre initial de variance renormalisé
-       const float* piInit,// parametre initial des proportions
-       const float* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
+       const Real* phiInit, // parametre initial de moyenne renormalisé
+       const Real* rhoInit, // parametre initial de variance renormalisé
+       const Real* piInit,// parametre initial des proportions
+       const Real* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
        int mini, // nombre minimal d'itérations dans lambdaIndex'algorithme EM
        int maxi, // nombre maximal d'itérations dans lambdaIndex'algorithme EM
        int mini, // nombre minimal d'itérations dans lambdaIndex'algorithme EM
        int maxi, // nombre maximal d'itérations dans lambdaIndex'algorithme EM
-       float gamma, // valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif
-       const float* glambda, // valeur des paramètres de régularisation du Lasso
-       const float* X,// régresseurs
-       const float* Y,// réponse
-       float seuil, // seuil pour prendre en compte une variable
-       float tau, // seuil pour accepter la convergence
+       Real gamma, // valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif
+       const Real* glambda, // valeur des paramètres de régularisation du Lasso
+       const Real* X,// régresseurs
+       const Real* Y,// réponse
+       Real seuil, // seuil pour prendre en compte une variable
+       Real tau, // seuil pour accepter la convergence
        // OUT parameters (all pointers, to be modified)
        int* A1, // matrice des coefficients des parametres selectionnes
        int* A2, // matrice des coefficients des parametres non selectionnes
        // OUT parameters (all pointers, to be modified)
        int* A1, // matrice des coefficients des parametres selectionnes
        int* A2, // matrice des coefficients des parametres non selectionnes
-       float* Rho,// estimateur ainsi calculé par le Lasso
-       float* Pi,// estimateur ainsi calculé par le Lasso
+       Real* Rho,// estimateur ainsi calculé par le Lasso
+       Real* Pi,// estimateur ainsi calculé par le Lasso
        // additional size parameters
        int n,// taille de lambdaIndex'echantillon
        int p,// nombre de covariables
        // additional size parameters
        int n,// taille de lambdaIndex'echantillon
        int p,// nombre de covariables
@@ -51,11 +51,11 @@ void selectiontotale_core(
        for (lambdaIndex=0; lambdaIndex<L; lambdaIndex++)
        {
                //allocate output variables
        for (lambdaIndex=0; lambdaIndex<L; lambdaIndex++)
        {
                //allocate output variables
-               float* phi = (float*)malloc(p*m*k*sizeof(float));
-               float* rho = (float*)malloc(m*m*k*sizeof(float));
-               float* pi = (float*)malloc(k*sizeof(float));
-               float* LLF = (float*)malloc(maxi*sizeof(float));
-               float* S = (float*)malloc(p*m*k*sizeof(float));
+               Real* phi = (Real*)malloc(p*m*k*sizeof(Real));
+               Real* rho = (Real*)malloc(m*m*k*sizeof(Real));
+               Real* pi = (Real*)malloc(k*sizeof(Real));
+               Real* LLF = (Real*)malloc(maxi*sizeof(Real));
+               Real* S = (Real*)malloc(p*m*k*sizeof(Real));
                EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda[lambdaIndex],X,Y,tau,
                        phi,rho,pi,LLF,S,
                        n,p,m,k);
                EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda[lambdaIndex],X,Y,tau,
                        phi,rho,pi,LLF,S,
                        n,p,m,k);
@@ -72,7 +72,7 @@ void selectiontotale_core(
                        int cpt2 = 0;
                        for (int jj=0; jj<m; jj++)
                        {
                        int cpt2 = 0;
                        for (int jj=0; jj<m; jj++)
                        {
-                               float maxPhi = 0.0;
+                               Real maxPhi = 0.0;
                                for (int r=0; r<k; r++)
                                {
                                        if (fabs(phi[ai(j,jj,r,p,m,k)]) > maxPhi)
                                for (int r=0; r<k; r++)
                                {
                                        if (fabs(phi[ai(j,jj,r,p,m,k)]) > maxPhi)
index d225592..fea6e39 100644 (file)
@@ -1,26 +1,28 @@
 #ifndef valse_selectiontotale_H
 #define valse_selectiontotale_H
 
 #ifndef valse_selectiontotale_H
 #define valse_selectiontotale_H
 
+#include "utils.h"
+
 // Main job on raw inputs (after transformation from mxArray)
 void selectiontotale_core(
        // IN parameters
 // Main job on raw inputs (after transformation from mxArray)
 void selectiontotale_core(
        // IN parameters
-       const float* phiInit,
-       const float* rhoInit,
-       const float* piInit,
-       const float* gamInit,
+       const Real* phiInit,
+       const Real* rhoInit,
+       const Real* piInit,
+       const Real* gamInit,
        int mini,
        int maxi,
        int mini,
        int maxi,
-       float gamma,
-       const float* glambda,
-       const float* X,
-       const float* Y,
-       float seuil,
-       float tau,
+       Real gamma,
+       const Real* glambda,
+       const Real* X,
+       const Real* Y,
+       Real seuil,
+       Real tau,
        // OUT parameters
        int* A1,
        int* A2,
        // OUT parameters
        int* A1,
        int* A2,
-       float* Rho,
-       float* Pi,
+       Real* Rho,
+       Real* Pi,
        // additional size parameters
        int n,
        int p,
        // additional size parameters
        int n,
        int p,
index 0c5a8d8..b33c69e 100644 (file)
@@ -1,6 +1,16 @@
 #ifndef valse_utils_H
 #define valse_utils_H
 
 #ifndef valse_utils_H
 #define valse_utils_H
 
+//#include <stdint.h>
+
+/********
+ * Types
+ *******/
+
+typedef float Real;
+//typedef uint32_t UInt;
+//typedef int32_t Int;
+
 /*******************
  * tune parallelism
  *******************/
 /*******************
  * tune parallelism
  *******************/
index 459a5cb..71c2342 100644 (file)
@@ -12,19 +12,19 @@ all: $(LIB) test.EMGLLF test.EMGrank test.constructionModelesLassoMLE test.EMGra
 $(LIB): $(LIB_OBJ)
        $(CC) -shared -o $@ $^ $(LDFLAGS)
 
 $(LIB): $(LIB_OBJ)
        $(CC) -shared -o $@ $^ $(LDFLAGS)
 
-test.EMGLLF: test.EMGLLF.o utils.o
+test.EMGLLF: test.EMGLLF.o test_utils.o
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
-test.constructionModelesLassoMLE: test.constructionModelesLassoMLE.o utils.o
+test.constructionModelesLassoMLE: test.constructionModelesLassoMLE.o test_utils.o
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
-test.EMGrank: test.EMGrank.o utils.o
+test.EMGrank: test.EMGrank.o test_utils.o
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
-test.constructionModelesLassoRank: test.constructionModelesLassoRank.o utils.o
+test.constructionModelesLassoRank: test.constructionModelesLassoRank.o test_utils.o
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
-test.selectionTotale: test.selectionTotale.o utils.o
+test.selectionTotale: test.selectionTotale.o test_utils.o
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
 %.o: %.c
        $(CC) -o $@ $^ $(LDFLAGS) $(TEST_LDFLAGS)
 
 %.o: %.c
diff --git a/src/test/OUT b/src/test/OUT
new file mode 100644 (file)
index 0000000..d695287
--- /dev/null
@@ -0,0 +1,1629 @@
+==8976== Memcheck, a memory error detector
+==8976== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
+==8976== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
+==8976== Command: ./test.EMGLLF
+==8976== 
+==8976== Invalid write of size 4
+==8976==    at 0x59E9535: EMGLLF_core (EMGLLF.c:228)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976==  Address 0x697c470 is 0 bytes after a block of size 1,200 alloc'd
+==8976==    at 0x4C2AB8D: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x400B3D: main (test.EMGLLF.c:37)
+==8976== 
+==8976== Invalid read of size 4
+==8976==    at 0x59E90DD: EMGLLF_core (EMGLLF.c:212)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976==  Address 0x697c4f0 is 16 bytes before a block of size 40 alloc'd
+==8976==    at 0x4C2AB8D: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x400B67: main (test.EMGLLF.c:39)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E58278: sqrt (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E94E4: EMGLLF_core (EMGLLF.c:228)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59E9872: EMGLLF_core (EMGLLF.c:248)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59E9958: EMGLLF_core (EMGLLF.c:250)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59E9F8D: EMGLLF_core (EMGLLF.c:300)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E97935: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E979DE: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E979E3: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E979F3: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E97A18: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E97A71: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E97A77: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E575C1: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E575CB: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E575CD: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57DA8: log (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98368: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98376: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983B5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983F5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98441: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98493: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984FC: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98549: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A4: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA280: EMGLLF_core (EMGLLF.c:319)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA2E0: EMGLLF_core (EMGLLF.c:325)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E97AA6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA5FF: EMGLLF_core (EMGLLF.c:350)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E58278: sqrt (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E82C1: EMGLLF_core (EMGLLF.c:80)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E58278: sqrt (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E838F: EMGLLF_core (EMGLLF.c:86)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59E89D8: EMGLLF_core (EMGLLF.c:156)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57DA8: log (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98368: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98376: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983B5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983F5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98441: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98493: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984FC: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98549: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A4: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59E8E86: EMGLLF_core (EMGLLF.c:178)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8D20: EMGLLF_core (EMGLLF.c:187)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8D20: EMGLLF_core (EMGLLF.c:187)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8D20: EMGLLF_core (EMGLLF.c:187)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8D20: EMGLLF_core (EMGLLF.c:187)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8D20: EMGLLF_core (EMGLLF.c:187)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57DA8: log (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98368: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98376: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983B5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983F5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98441: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98493: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984FC: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98549: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A4: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8DE1: EMGLLF_core (EMGLLF.c:190)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9861: EMGLLF_core (EMGLLF.c:248)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9861: EMGLLF_core (EMGLLF.c:248)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9861: EMGLLF_core (EMGLLF.c:248)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9861: EMGLLF_core (EMGLLF.c:248)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9861: EMGLLF_core (EMGLLF.c:248)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9943: EMGLLF_core (EMGLLF.c:250)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9943: EMGLLF_core (EMGLLF.c:250)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9943: EMGLLF_core (EMGLLF.c:250)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9943: EMGLLF_core (EMGLLF.c:250)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9943: EMGLLF_core (EMGLLF.c:250)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9AF3: EMGLLF_core (EMGLLF.c:254)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9AF3: EMGLLF_core (EMGLLF.c:254)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9AF3: EMGLLF_core (EMGLLF.c:254)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9AF3: EMGLLF_core (EMGLLF.c:254)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E9AF3: EMGLLF_core (EMGLLF.c:254)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E99DC: EMGLLF_core (EMGLLF.c:251)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E99DC: EMGLLF_core (EMGLLF.c:251)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E99DC: EMGLLF_core (EMGLLF.c:251)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E99DC: EMGLLF_core (EMGLLF.c:251)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E99DC: EMGLLF_core (EMGLLF.c:251)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E97ABE: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E97C6E: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E5759E: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E575E0: exp (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA179: EMGLLF_core (EMGLLF.c:315)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B97: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA38F: EMGLLF_core (EMGLLF.c:332)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E48B9D: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x4E57E73: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA38F: EMGLLF_core (EMGLLF.c:332)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA38F: EMGLLF_core (EMGLLF.c:332)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA38F: EMGLLF_core (EMGLLF.c:332)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59EA38F: EMGLLF_core (EMGLLF.c:332)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA8A0: EMGLLF_core (EMGLLF.c:377)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA8F7: EMGLLF_core (EMGLLF.c:383)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA912: EMGLLF_core (EMGLLF.c:385)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== 
+==8976== More than 100 errors detected.  Subsequent errors
+==8976== will still be recorded, but in less detail than before.
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57DA8: log (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98368: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98376: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983B5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E983F5: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98441: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E98493: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4E984FC: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E98549: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A4: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E985A6: ??? (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8807: EMGLLF_core (EMGLLF.c:140)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57E9B: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8A4F: EMGLLF_core (EMGLLF.c:169)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA5: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8A4F: EMGLLF_core (EMGLLF.c:169)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57EA7: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8A4F: EMGLLF_core (EMGLLF.c:169)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57F24: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57F48: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57F4A: pow (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8AEA: EMGLLF_core (EMGLLF.c:173)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57DC0: log (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4E57DC2: log (in /usr/lib/libm-2.24.so)
+==8976==    by 0x59E8BAB: EMGLLF_core (EMGLLF.c:177)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA94B: EMGLLF_core (EMGLLF.c:67)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x59EA977: EMGLLF_core (EMGLLF.c:67)
+==8976==    by 0x400C03: main (test.EMGLLF.c:45)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x400EE4: compareArray (test_utils.c:19)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400C89: main (test.EMGLLF.c:58)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x400F09: compareArray (test_utils.c:22)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3A458: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3A472: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C33A90: __mpn_extract_double (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A4A1: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3A516: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3A51E: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3BB67: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C327D8: __mpn_lshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3BB6B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C327DB: __mpn_lshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3BB6B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3BBA2: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3BBD1: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3BD46: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3C1C8: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32D74: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3C1E3: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32DFF: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3C1E3: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32E72: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3C1E3: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3C1F7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3C206: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C328E8: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3C3F5: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3290D: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3C3F5: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F89: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32D74: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F90: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32D98: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F90: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3A7CB: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B151: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F89: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B18E: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3B1BD: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B1C3: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B6AC: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3AAE2: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3ABDD: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B3ED: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B5F1: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B5D2: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400D29: main (test.EMGLLF.c:68)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3AF68: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3BB19: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C327D8: __mpn_lshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3BB1D: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C327DB: __mpn_lshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3BB1D: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3BB43: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3BB55: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3AFA1: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B053: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4C2EED3: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B013: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4C2EFEB: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B013: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4C2F001: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B013: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4C2EF43: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B013: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B01C: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B022: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C322EA: __mpn_cmp (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B1FC: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C322EE: __mpn_cmp (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B1FC: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C322F5: __mpn_cmp (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B1FC: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B203: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4C2EED3: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B224: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4C2EF40: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B224: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x4C2EF43: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B224: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x4C2EF4E: memcpy@GLIBC_2.2.5 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C3B224: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3B22D: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32D74: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C32A2F: __mpn_mul (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B07E: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32DFF: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C32A2F: __mpn_mul (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B07E: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32E72: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C32A2F: __mpn_mul (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B07E: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32A40: __mpn_mul (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B07E: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3B2A6: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3B2B6: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B2BA: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3C602: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3C617: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B345: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C328E8: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B369: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3290D: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B369: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C32895: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B38B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C328BC: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B38B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C328E6: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B38B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C328E8: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B38B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C328F9: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B38B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3290D: __mpn_rshift (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B38B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3B39D: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39EAD: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32675: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32678: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C32689: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3268F: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C326A0: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C326AF: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C326B7: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C326E3: __mpn_divrem (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39F05: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F12: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F1A: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F2E: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39F34: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32D74: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39EC4: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C32D98: __mpn_mul_1 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C39EC4: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39EC8: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39EDA: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A70B: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F12: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F1A: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F2E: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39F34: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39EC8: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C3B124: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C3B128: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39EDA: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3A7C7: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F12: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F1A: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39F2E: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39F34: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Conditional jump or move depends on uninitialised value(s)
+==8976==    at 0x5C39EC8: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Use of uninitialised value of size 8
+==8976==    at 0x5C39EDA: hack_digit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3B16F: __printf_fp_l (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C37CD1: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400F25: compareArray (test_utils.c:23)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400DCC: main (test.EMGLLF.c:78)
+==8976== 
+==8976== Syscall param write(buf) points to uninitialised byte(s)
+==8976==    at 0x5CCB530: __write_nocancel (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C62866: _IO_file_write@@GLIBC_2.2.5 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C61BB1: new_do_write (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C63938: _IO_do_write@@GLIBC_2.2.5 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C6552B: _IO_flush_all_lockp (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C656F4: _IO_cleanup (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C25932: __run_exit_handlers (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C259E9: exit (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C10297: (below main) (in /usr/lib/libc-2.24.so)
+==8976==  Address 0x699db91 is 177 bytes inside a block of size 4,096 alloc'd
+==8976==    at 0x4C2AB8D: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==8976==    by 0x5C56AB1: _IO_file_doallocate (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C64AD5: _IO_doallocbuf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C63E37: _IO_file_overflow@@GLIBC_2.2.5 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C62F05: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C36EA5: vfprintf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x5C3F278: printf (in /usr/lib/libc-2.24.so)
+==8976==    by 0x400E31: compareArray (test_utils.c:12)
+==8976==    by 0x400F6A: compareArray_real (test_utils.c:30)
+==8976==    by 0x400C89: main (test.EMGLLF.c:58)
+==8976== 
+Checking phi
+    Inaccuracy: max(abs(error)) = 0.484829 >= 1e-05
+Checking rho
+    Inaccuracy: max(abs(error)) = 1.36056 >= 1e-05
+Checking pi
+    Inaccuracy: max(abs(error)) = 0.145946 >= 1e-05
+Checking LLF
+    Inaccuracy: max(abs(error)) = 14.0083 >= 1e-05
+Checking S
+    Inaccuracy: max(abs(error)) = 130.206 >= 1e-05
+==8976== 
+==8976== HEAP SUMMARY:
+==8976==     in use at exit: 523 bytes in 18 blocks
+==8976==   total heap usage: 168 allocs, 150 frees, 348,490 bytes allocated
+==8976== 
+==8976== LEAK SUMMARY:
+==8976==    definitely lost: 515 bytes in 17 blocks
+==8976==    indirectly lost: 0 bytes in 0 blocks
+==8976==      possibly lost: 0 bytes in 0 blocks
+==8976==    still reachable: 8 bytes in 1 blocks
+==8976==         suppressed: 0 bytes in 0 blocks
+==8976== Rerun with --leak-check=full to see details of leaked memory
+==8976== 
+==8976== For counts of detected and suppressed errors, rerun with: -v
+==8976== Use --track-origins=yes to see where uninitialised values come from
+==8976== ERROR SUMMARY: 68204 errors from 232 contexts (suppressed: 0 from 0)
index 198d5a8..e9c7678 100644 (file)
@@ -1,5 +1,5 @@
 #include "constructionModelesLassoMLE.h"
 #include "constructionModelesLassoMLE.h"
-#include "ioutils.h"
+#include "test_utils.h"
 
 int main(int argc, char** argv)
 {
 
 int main(int argc, char** argv)
 {
index 8f6b2b1..db38f14 100644 (file)
@@ -1,7 +1,9 @@
 #include "EMGLLF.h"
 #include "EMGLLF.h"
-#include "utils.h"
+#include "test_utils.h"
 #include <stdlib.h>
 
 #include <stdlib.h>
 
+#include <stdio.h>
+
 int main(int argc, char** argv)
 {
        int* dimensions = readArray_int("dimensions");
 int main(int argc, char** argv)
 {
        int* dimensions = readArray_int("dimensions");
@@ -40,7 +42,6 @@ int main(int argc, char** argv)
        ////////////////////
        // Call to EMGLLF //
        ////////////////////
        ////////////////////
        // Call to EMGLLF //
        ////////////////////
-
        EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,tau,
                phi,rho,pi,LLF,S,
                n,p,m,k);
        EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,tau,
                phi,rho,pi,LLF,S,
                n,p,m,k);
index 59a68d0..80263a0 100644 (file)
@@ -1,5 +1,5 @@
 #include "EMGrank.h"
 #include "EMGrank.h"
-#include "utils.h"
+#include "test_utils.h"
 
 int main(int argc, char** argv)
 {
 
 int main(int argc, char** argv)
 {
index 1060e20..cf95bc4 100644 (file)
@@ -1,5 +1,5 @@
 #include "constructionModelesLassoRank.h"
 #include "constructionModelesLassoRank.h"
-#include "ioutils.h"
+#include "test_utils.h"
 
 int main(int argc, char** argv)
 {
 
 int main(int argc, char** argv)
 {
index ebfdf19..2553d05 100644 (file)
@@ -1,5 +1,5 @@
 #include "selectiontotale.h"
 #include "selectiontotale.h"
-#include "ioutils.h"
+#include "test_utils.h"
 
 int main(int argc, char** argv)
 {
 
 int main(int argc, char** argv)
 {
similarity index 91%
rename from src/test/utils.c
rename to src/test/test_utils.c
index 2eac0c2..7fc240e 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
+#include "utils.h"
 
 // Check if array == refArray
 void compareArray(const char* ID, const void* array, const void* refArray, int size,
 
 // Check if array == refArray
 void compareArray(const char* ID, const void* array, const void* refArray, int size,
@@ -61,6 +62,7 @@ void* readArray(const char* fileName, int isinteger)
        void* array = malloc(n*elementSize);
        for (int i=0; i<n; i++)
        {
        void* array = malloc(n*elementSize);
        for (int i=0; i<n; i++)
        {
+               fgets(bufferNum, 64, arrayFile);
                // transform buffer content into float or int, and store it at appropriate location
                if (isinteger)
                        ((int*)array)[i] = atoi(bufferNum);
                // transform buffer content into float or int, and store it at appropriate location
                if (isinteger)
                        ((int*)array)[i] = atoi(bufferNum);
@@ -85,10 +87,16 @@ float* readArray_real(const char* fileName)
 
 int read_int(const char* fileName)
 {
 
 int read_int(const char* fileName)
 {
-       return readArray_int(fileName)[0];
+       int* array = readArray_int(fileName);
+       int res = array[0];
+       free(array);
+       return res;
 }
 
 float read_real(const char* fileName)
 {
 }
 
 float read_real(const char* fileName)
 {
-       return readArray_real(fileName)[0];
+       Real* array = readArray_real(fileName);
+       Real res = array[0];
+       free(array);
+       return res;
 }
 }
similarity index 100%
rename from src/test/utils.h
rename to src/test/test_utils.h