|
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