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 Stevens Systems Engineering
34128 Kassel, Germany
Navigation Systems, Estimation  and
                 Bayesian Filtering

Boost list run by bdawes at, gregod at, cpdaniel at, john at