Bug in gmp/mpfr/mpc, never ending ctan computation
Richard Biener
rguenther at suse.de
Mon Nov 19 10:57:03 UTC 2018
On Mon, 19 Nov 2018, Torbjörn Granlund wrote:
> Richard Biener <rguenther at suse.de> writes:
>
> > __real x = 3.09126495087690770626068115234375e+8;
> > __imag x = -4.045689747817175388336181640625e+8;
> > volatile _Complex double y = ctan (x);
> > return 0;
> > }
> >
> > If we get a test case somewhat closer to GMP, then it is likely
> > somebody will look at it.
> >
> > I expect the maintainers of library called by gcc (mpc?) would be helped
> > by seeing the actual call to their library.
>
> OK, I can reproduce the issue with mpc 1.1.0, mpfr 3.1.4 and gmp 6.1.0
> using
>
> #include <mpc.h>
> #include <mpfr.h>
>
> int main()
> {
> mpc_t m;
> mpc_init2 (m, 53);
> mpfr_set_str (mpc_realref (m), "3.09126495087690770626068115234375e+8",
> 10, GMP_RNDN);
> mpfr_set_str (mpc_imagref (m), "-4.045689747817175388336181640625e+8",
> 10, GMP_RNDN);
> mpfr_clear_flags ();
> mpc_tan (m, m, 0);
> return 0;
> }
>
> As I questioned in the first followup I wonder if GCC can tell mpc
> to not exceed 53bits of precision for the result? Even with denormals
> a precision of 303084 bits isn't possible?
>
> Use setrlimit(RLIMIT_CPU, ...) and a signal handler? :-)
:/ But then with GCC we want deterministic behavior -- ISL
added some "computation budget" and error reporting if that was
taken up. Maybe gmp/mpfr/mpc could consider adding such a thing
(reporting budget overruns via a signal could be acceptable if
the API churn would be too bad for another way).
> I simplified your test case using 1 as the real part and an integer for
> the imaginary part. With the real part set to 10000, the computation
> finishes in about 10 seconds, with every doubling of it the runtime
> almost triples. (If my observation generalises to an extended real part
> range, the compilation for your test case should terminate in about
> 10*3^log2(4.045689747817175388336181640625e+8/10000)/3600/24/365 years.)
Ick. I wonder if the actual ctan result is infinite or we just
fail to compute it in an efficient manner...
Richard.
--
Richard Biener <rguenther at suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
More information about the gmp-bugs
mailing list