Inaccurate/inconsistent output from mpf_out_str
Yihang Ho
hoyihang5 at gmail.com
Tue Oct 6 12:43:55 UTC 2015
Dear Paul,
Thanks for your reply. I am not familiar with MPFR, but is the original
behavior the expected one?
Yihang
On Tue, Oct 6, 2015 at 8:10 PM paul zimmermann <Paul.Zimmermann at inria.fr>
wrote:
> Dear Yihang,
>
> note that if you use MPFR (mpfr.org) with the program below, you will get
> on a 64-bit computer:
>
> 2.628978819e208987640249978733
> 2.6289788186792204674075064891600428077435502009263e208987640249978733
>
> 2.628978818679220467407506489160042807743550200926299545175582219560661239284074832295595964174891630e208987640249978733
>
> where all digits agree (I added the mpfr_set_emax call otherwise one gets
> an
> overflow with the default MPFR exponent range).
>
> Best regards,
> Paul Zimmermann
>
> // gcc sample.c -lmpfr -lgmp
> #include <stdio.h>
> #include <gmp.h>
> #include <mpfr.h>
> #include <mpf2mpfr.h> /* added */
> #define PRECISION 1024
>
> int main() {
> unsigned long n = 1000000000000000000;
> mpf_t result, r, s, root5;
>
> mpfr_set_emax (mpfr_get_emax_max ()); /* added */
> mpf_init2(root5, PRECISION);
> mpf_sqrt_ui(root5, 5);
>
> mpf_init2(r, PRECISION);
> mpf_add_ui(r, root5, 1);
> mpf_div_2exp(r, r, 1);
> mpf_pow_ui(r, r, n);
>
> mpf_init2(s, PRECISION);
> mpf_ui_sub(s, 1, root5);
> mpf_div_2exp(s, s, 1);
> mpf_pow_ui(s, s, n);
>
> mpf_init2(result, PRECISION);
> mpf_sub(result, r, s);
> mpf_div(result, result, root5);
>
> mpf_out_str(stdout, 10, 10, result);
>
> putchar('\n');
>
> mpf_out_str(stdout, 10, 50, result);
>
> putchar('\n');
>
> mpf_out_str(stdout, 10, 100, result);
>
> return 0;
> }
>
>
> > From: Yihang Ho <hoyihang5 at gmail.com>
> > Date: Sun, 13 Sep 2015 02:55:33 +0000
> >
> > Dear all,
> >
> > In one of my programs, the output of mpf_out_str is not as accurate as it
> > should be.
> >
> > Consider this piece of code: http://git.io/vZKCz
> >
> > This code computes the n-th Fibonacci number using Binet's formula. The
> > last few lines merely print the results to 10, 50, and 100 digits.
> However,
> > the outputs (http://git.io/vZKCg) are not consistent with one another.
> As
> > you can see, only the first 5 digits from the first line are the same as
> > the second line while only the first 44 digits from the second line are
> the
> > same the third line. I believe this is a bug as it is not documented
> > anywhere.
> >
> > I am able to replicate this problem on OS X and Ubuntu.
> >
> > Details about my systems:
> >
> > - OS X: http://git.io/vZKCr
> > - Ubuntu: http://git.io/vZKCo
> >
> > Do let me know if any additional info are needed.
> >
> > Best,
> > Yihang
>
More information about the gmp-bugs
mailing list