linbox
linbox copied to clipboard
Singular solve with Method::SymbolicNumericOverlap fails
#include <linbox/solutions/solve.h>
using namespace LinBox;
int main(void)
{
using Ring = Givaro::ZRing<Integer>;
using Matrix = DenseMatrix<Ring>;
using Vector = DenseVector<Ring>;
Ring ZZ;
Matrix A(ZZ, 1, 2);
Vector x(ZZ, A.coldim());
Vector b(ZZ, A.rowdim());
Ring::Element d;
A.setEntry(0, 0, "-4354606737974399");
A.setEntry(0, 1, "1444080914074811");
ZZ.assign(b[0], "-7270283604704528652531814423094");
// Calling SymbolicNumericOverlap
Method::SymbolicNumericOverlap method;
solve(x, d, A, b, method);
std::cout << "[ " << A.getEntry(0, 0) << " " << A.getEntry(0, 1) << " ] x = [ " << b[0] << " ]";
std::cout << " => xNum/xDen = [ " << x[0] << " " << x[1] << " ] / " << d << std::endl;
if ((A.getEntry(0, 0) * x[0]) + (A.getEntry(0, 1) * x[1]) != b[0] * d) {
std::cerr << "PROBLEM! Ax != b" << std::endl;
}
return 0;
}
Outputs: [ -4354606737974399 1444080914074811 ] x = [ -7270283604704528652531814423094 ] => xNum/xDen = [ 7270283604704528652531814423094 0 ] / 4089642563345281
which is obviously wrong.
Seems like some Integer has been truncated to an int64.