aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-12-20 22:10:33 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-12-20 22:10:33 +0100
commite8d6862f14445c28a299ce087bbbffdf5af0ebf6 (patch)
tree01737b56810f9031758ab2617c5b0100422d00fe /unsupported
parente2f4ee1c2b0933bd60d169dc328b321f2db40605 (diff)
Properly adjust precision when saving to Market format.
Diffstat (limited to 'unsupported')
-rw-r--r--unsupported/Eigen/src/SparseExtra/MarketIO.h9
-rw-r--r--unsupported/test/sparse_extra.cpp2
2 files changed, 6 insertions, 5 deletions
diff --git a/unsupported/Eigen/src/SparseExtra/MarketIO.h b/unsupported/Eigen/src/SparseExtra/MarketIO.h
index 9dbd0488d..fc70a24d8 100644
--- a/unsupported/Eigen/src/SparseExtra/MarketIO.h
+++ b/unsupported/Eigen/src/SparseExtra/MarketIO.h
@@ -231,12 +231,13 @@ template<typename SparseMatrixType>
bool saveMarket(const SparseMatrixType& mat, const std::string& filename, int sym = 0)
{
typedef typename SparseMatrixType::Scalar Scalar;
+ typedef typename SparseMatrixType::RealScalar RealScalar;
std::ofstream out(filename.c_str(),std::ios::out);
if(!out)
return false;
out.flags(std::ios_base::scientific);
- out.precision(64);
+ out.precision(std::numeric_limits<RealScalar>::digits10 + 2);
std::string header;
internal::putMarketHeader<Scalar>(header, sym);
out << header << std::endl;
@@ -247,7 +248,6 @@ bool saveMarket(const SparseMatrixType& mat, const std::string& filename, int sy
{
++ count;
internal::PutMatrixElt(it.value(), it.row()+1, it.col()+1, out);
- // out << it.row()+1 << " " << it.col()+1 << " " << it.value() << "\n";
}
out.close();
return true;
@@ -256,13 +256,14 @@ bool saveMarket(const SparseMatrixType& mat, const std::string& filename, int sy
template<typename VectorType>
bool saveMarketVector (const VectorType& vec, const std::string& filename)
{
- typedef typename VectorType::Scalar Scalar;
+ typedef typename VectorType::Scalar Scalar;
+ typedef typename VectorType::RealScalar RealScalar;
std::ofstream out(filename.c_str(),std::ios::out);
if(!out)
return false;
out.flags(std::ios_base::scientific);
- out.precision(64);
+ out.precision(std::numeric_limits<RealScalar>::digits10 + 2);
if(internal::is_same<Scalar, std::complex<float> >::value || internal::is_same<Scalar, std::complex<double> >::value)
out << "%%MatrixMarket matrix array complex general\n";
else
diff --git a/unsupported/test/sparse_extra.cpp b/unsupported/test/sparse_extra.cpp
index ceec3d8a8..4f6723d6d 100644
--- a/unsupported/test/sparse_extra.cpp
+++ b/unsupported/test/sparse_extra.cpp
@@ -139,7 +139,7 @@ void check_marketio()
m1 = DenseMatrix::Random(rows, cols).sparseView();
saveMarket(m1, "sparse_extra.mtx");
loadMarket(m2, "sparse_extra.mtx");
- VERIFY_IS_APPROX(m1,m2);
+ VERIFY_IS_EQUAL(DenseMatrix(m1),DenseMatrix(m2));
}
void test_sparse_extra()