Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Singular solve with Method::SymbolicNumericOverlap fails #200

Open
Breush opened this issue Apr 10, 2019 · 0 comments
Open

Singular solve with Method::SymbolicNumericOverlap fails #200

Breush opened this issue Apr 10, 2019 · 0 comments

Comments

@Breush
Copy link
Contributor

Breush commented Apr 10, 2019

#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.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant