X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fgaussjordan.c;h=34cd9b64669345f838bfaa00c61db9dc5964b925;hb=48b0fa8564962b17e136a0f925eff458ca16abef;hp=c4c7998805454ac835dcc9fbf1e8609e14226f49;hpb=60461da2fb3c89e65c2a1064135a0cd476841d1d;p=libfirm diff --git a/ir/adt/gaussjordan.c b/ir/adt/gaussjordan.c index c4c799880..34cd9b646 100644 --- a/ir/adt/gaussjordan.c +++ b/ir/adt/gaussjordan.c @@ -32,10 +32,7 @@ /* returns 0 if successful */ /* returns -1 if ill-conditioned matrix */ /*------------------------------------------------------*/ - -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include #include @@ -45,91 +42,96 @@ int firm_gaussjordansolve(double *A, double *vec, int nsize) { - int i, j, row, col, col2, biggest_r = 0, biggest_c = 0, t; - double big, temp, sum; - double *scramvec = xmalloc(nsize * sizeof(*scramvec)); - int *x = xmalloc(nsize * sizeof(*x)); + int i, j, row, col, col2, biggest_r = 0, biggest_c = 0, t; + double big, temp, sum; + double *scramvec = XMALLOCN(double, nsize); + int *x = XMALLOCN(int, nsize); + int res = 0; #define _A(row,col) A[(row)*nsize + (col)] - /* init x[] */ - for(i=0;i big) { - biggest_r = row; - biggest_c = col2; - big = temp; /* largest element left */ - } - } - } - if (big < SMALL) { - return (-1); - } - /* swap rows */ - for(i=0;i=0;i--) { - sum = 0; - for(j=i+1;j big) { + biggest_r = row; + biggest_c = col2; + big = temp; /* largest element left */ + } + } + } + if (big < SMALL) { + res = -1; + goto end; + } + + /* swap rows */ + for(i=0;i=0;i--) { + sum = 0; + for(j=i+1;j