Boost logo

Boost :

From: Michael Stevens (Michael.Stevens_at_[hidden])
Date: 2004-10-05 12:25:32


On Tuesday 05 October 2004 15:19,
Kasper Peeters <kasper.peeters_at_[hidden] wrote:

> I need to handle extremely large sparse matrices, of approximately
> half a million square elements (with, typically, on the order of 5
> million non-zero entries).
>
> The following, however, fails on a machine where std::size_t is 4
> bytes long:
>
>    #include <boost/numeric/ublas/matrix_sparse.hpp>
>    
>    int main () {
>        using namespace boost::numeric::ublas;
>        sparse_matrix<double> m(400000, 400000);
>    }

I assume this is uBLAS from Boost 1.31.0

If that is the case the short answer is that you need a more recent uBLAS. The
current Boost CVS HEAD will do. These overflow problem have been fix for a
few months.

Longer answer. Don't forget that uBLAS has several sparse format to choose
from. You may find coordinate_matrix or compress_matrix more suitable then
sparse_matrix. Your problem is very large and to get efficient solutions you
may need to exploit any structure it has!

> It fails with
>
>    Assertion failed in file
>    boost/numeric/ublas/functional.hpp at line 1345:
The overflow test
            BOOST_UBLAS_CHECK ((size1 * size2) / size1 == size2, bad_size ());
is quite amusing. It actually checks if the calculation has not already
overflowed, with a small chance of a false positive.

Michael

-- 
___________________________________
Michael Stevens Systems Engineering
34128 Kassel, Germany
Navigation Systems, Estimation  and
                 Bayesian Filtering
    http://bayesclasses.sf.net
___________________________________

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk