New issue

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

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

Already on GitHub? Sign in to your account

Floating point exception in wrapper using dd #362

Open
lgremy opened this Issue Dec 9, 2018 · 1 comment

Comments

Projects
None yet
2 participants
@lgremy
Copy link
Contributor

lgremy commented Dec 9, 2018

I ran fplll -a lll basis.txt, where basis.txt. I obtained the following error: Floating point exception. The matrix contains quite large integers. Using fast and double is however sufficient to perform the reduction and provides the same output as using proved and mpfr. If we use the verbose mode in addition to the wrapper mode, we can observe that Wrapper: calling proved<mpz_t,dd_real> method (precision=55). If dd_real guarantees that the precision used is sufficient, the exponent of dd_real is probably not sufficient to store in a floating point way the integer basis vectors, which is IMO the reason of the failure, but I do not know how to check this.

Removing the lines between FPLLL_WITH_QD in last_lll() is sufficient to solve the errors, but I am not sure this is what we want to solve the issue.

Note that if these lines must be modified, they must accordingly be modified in the last_hlll() method.

gilvillard added a commit that referenced this issue Dec 20, 2018

gilvillard added a commit that referenced this issue Dec 20, 2018

@gilvillard

This comment has been minimized.

Copy link
Collaborator

gilvillard commented Dec 20, 2018

The size of the exponent was tested in proved_loop but not in last_lll, the exponent of
dd_real is the same as with doubles. See the exponent test introduced now at line 267 of wrapper.cpp

Besides, a remark : in proved_loop, line 214 could be reached (WITH_QD), with precision
between numeric_limits::digits and PREC_DD, leading to a failure since use
of dpe_t. However, in Wrapper::lll(), the call is heuristic_loop(increase_prec(prec_d)) and
the increased precision seems to be greater there than PREC_DD.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment