X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fgaussjordan.c;h=34cd9b64669345f838bfaa00c61db9dc5964b925;hb=48b0fa8564962b17e136a0f925eff458ca16abef;hp=39aebf04751e27b50c676579a05ec7595ac583d6;hpb=57d365a67aaef76497b85e9a18b785c562652b16;p=libfirm diff --git a/ir/adt/gaussjordan.c b/ir/adt/gaussjordan.c index 39aebf047..34cd9b646 100644 --- a/ir/adt/gaussjordan.c +++ b/ir/adt/gaussjordan.c @@ -32,9 +32,7 @@ /* returns 0 if successful */ /* returns -1 if ill-conditioned matrix */ /*------------------------------------------------------*/ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include #include @@ -44,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