X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fgaussjordan.c;h=7773238ca82cfb56f8884fd9abc76af6ef3ef9fa;hb=15b2fcf1f10bdf2c54a8e600a6f5fe2e17b56834;hp=c4c7998805454ac835dcc9fbf1e8609e14226f49;hpb=863d31d7a5c8210432fef88b30fc3e8353131538;p=libfirm diff --git a/ir/adt/gaussjordan.c b/ir/adt/gaussjordan.c index c4c799880..7773238ca 100644 --- a/ir/adt/gaussjordan.c +++ b/ir/adt/gaussjordan.c @@ -32,104 +32,108 @@ /* returns 0 if successful */ /* returns -1 if ill-conditioned matrix */ /*------------------------------------------------------*/ - -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include #include #include "xmalloc.h" +#include "gaussjordan.h" + #define SMALL 0.00001 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