problem when converting from double

Will Galway galway at math.uiuc.edu
Fri Jan 28 19:17:13 CET 2005


On Friday January 28, 2005 at 12:03:38, Thomas Abraham wrote:
 > I am compiling this in C++ builder using deltatrinity's dll. When I
 > step through the code, i see that valnum is a huge number 20345533 and
 > valden equals zero.
 > 
 > could it be some effect of the C++ builder environment? also the fact
 > that mpz_fits_slong_p(num) gives me zero means I could not fit my
 > answer into a long int and therefore it gives me junk(?)
 > 
 > Thanks for your reply. 
 > 
 > Tom

I'm afraid that I'm only an occasional user of gmp, and I haven't used
the mpq_t type (nor the C++ builder, nor deltatrinity's dll).  So, I
hope someone else on this mailing list can help you with your
questions.

-- Regards, Will
( mailto:galway at math.uiuc.edu  http://www.math.uiuc.edu/~galway )

 > On Fri, 28 Jan 2005 10:23:06 -0600 (CST), Will Galway
 > <galway at math.uiuc.edu> wrote:
 > > You say that you get junk when you set g=0.333, but what junk do you
 > > get?  With a quick glance at your code, it looks correct to me, so I'd
 > > guess that in the "junk case" the ratio of your numerator to your
 > > denominator is roughly 0.333.  I'd be AMAZED if the numerator==333,
 > > denominator==1000, or numerator=1, denominator==3, or anything so
 > > pretty.  Remember that "0.333" is going to be some binary
 > > approximation to 333/1000, and that 333/1000 must have an infinite
 > > binary expansion to be exact.
 > > 
 > > -- Regards, Will
 > > ( mailto:galway at math.uiuc.edu  http://www.math.uiuc.edu/~galway )
 > > 
 > > 
 > > On Friday January 28, 2005 at 10:16:57, Thomas Abraham wrote:
 > >  > hi,
 > >  >
 > >  > I am a beginner with GMP so this may sound stupid :
 > >  >
 > >  > I am trying to convert a double type to rational and then find the
 > >  > numerator and denominator integers. so i do
 > >  > *******************************
 > >  > mpq_t val;
 > >  > double g;
 > >  > mpz_t num,den;
 > >  > signed long int valnum, valden;
 > >  >
 > >  > mpq_init(val);mpz_init(num);mpz_init(den);
 > >  > g=0.333;
 > >  > mpq_set_d(val,g);
 > >  >
 > >  > mpq_get_num(num,val);
 > >  > mpq_get_den(den,val);
 > >  >
 > >  > valnum=mpz_get_si(num);
 > >  > valden=mpz_get_si(den);
 > >  >
 > >  > *******************************************
 > >  >
 > >  > now if I set g=0.5 , I get valnum=1,valden=2 .
 > >  > if i set g=0.333 , i get junk.
 > >  > if i use mpz_fits_slong_p(num) , it gives me zero in the second case.
 > >  >
 > >  > Is there a problem with my compiler? Is my code totally wrong? Is
 > >  > there an easier way to do this? I looked at the manual about 10 times
 > >  > but could not find out how to get the numerator and denominator for
 > >  > certain double values as mentioned above.
 > >  >
 > >  > any suggestions would be greatly appreciated
 > >  >
 > >  > thanks
 > >  >
 > >  > Tom
 > >  >
 > >  > thomaskabraham at gmail.com
 > >  > _______________________________________________
 > >  > gmp-discuss mailing list
 > >  > gmp-discuss at swox.com
 > >  > https://gmplib.org/mailman/listinfo/gmp-discuss
 > >


More information about the gmp-discuss mailing list