On 27 March 2014 19:25, Alex Dyachenko <adya...@gmail.com> wrote: > It seems that when the source and destination of mpz_nthroot are the same > the result is _sometimes_ incorrect. >
Ah, thanks very much for reporting this! I'll add a ticket and we can fix this for the release. > > I'm linking with a static lib build of MPIR based on a slightly old > February 2014 commit (94c011b8a3b096f91dd2eb9fbfaae53d6de045ee), which I > built for Windows x64 with MS VC2012 and got all the tests to pass. (I > have not been able to build the latest commit for some time presumably > because the Windows build updates have not been pulled from Gladman's fork). > They've been merged, but work is still underway on the Windows side. We should have it sorted in a few days. Thanks for your patience. > > Here is my test code (forgive the naive C): > > mpz_t a, cube, r; > char c[100]; > mpz_init_set_str(a, "8984948281360922385394772450147012613851354303", 10); > mpz_get_str(c, 10, a); > cout << "a = " << c << endl; > > mpz_init(cube); > mpz_mul(cube, a, a); > mpz_mul(cube, cube, a); > > mpz_init_set(r, cube); > mpz_nthroot(r, r, 3); > mpz_get_str(c, 10, r); > cout << "nthroot(r,r,3) returns " << c << endl; > > mpz_nthroot(r, cube, 3); > mpz_get_str(c, 10, r); > cout << "nthroot(r,c,3) returns " << c << endl; > > This produces the following output: > a = 8984948281360922385394772450147012613851354303 > nthroot(r,r,3) returns 8984948281360922385394772450147012613851354302 > nthroot(r,c,3) returns 8984948281360922385394772450147012613851354303 > > The result is 1 too small when source and result are the same. This does > NOT happen with mpz_root(r, r, 3) or mpz_rootrem(r, rem, r, 3) for this > particular value of a. I have no idea what exactly about this random value > causes this; it does calculate correctly, for example, with a=3. > > Is this an exception to the general rule that source and destination can > be the same as long as one of them is SRCPTR? If so I'd like to know what > other exceptions exist. > No, it's a bug. We'll try to track it down. Thanks. Bill. > > -- > You received this message because you are subscribed to the Google Groups > "mpir-devel" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to mpir-devel+unsubscr...@googlegroups.com. > To post to this group, send email to mpir-devel@googlegroups.com. > Visit this group at http://groups.google.com/group/mpir-devel. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "mpir-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to mpir-devel+unsubscr...@googlegroups.com. To post to this group, send email to mpir-devel@googlegroups.com. Visit this group at http://groups.google.com/group/mpir-devel. For more options, visit https://groups.google.com/d/optout.