Daniele Varrazzo writes:
> On Mon, Feb 28, 2011 at 11:07 PM, Daniele Varrazzo
> <daniele.varrazzo@gmail.com> wrote:
>
> > Also notice that float64 has 53 bits of precision, 15 full decimal
> > digits. If you don't need more precision when you write data in the
> > database (even if you have used more during calculations) you may just
> > use the repr(float()) of your mpq to write into the database.
>
> Or else, in the adapter you may use mpf to approximate the rational to
> the precision you need.
>
> >>> gmpy.mpq(2,3)
> mpq(2,3)
> >>> gmpy.mpf(_, 100)
> mpf('6.666666666666666666666666666666666666667e-1',100)
> >>> str(_)
> '0.6666666666666666666666666666666666666667'
Daniele,
Thanks for the ideas. One thing I didn't specify in my original post
is that the numeric columnss in my database are for monetary values,
so I can't use binary floating point representations in my python
code, else I risk inexactness and accumulated error in long
computations.
I need to use decimal floating point, e.g., decimal.Decimal (or
cdecimal for a C implementation) or a rational object, like
fractions.Fraction (or gmpy.mpq for a C impl).
I could use mpq for internal computations then use mpf for the final
conversion to the string I need for my adapter, but I want a single
type I can use throughout my code without such concerns.
I'm going to try cdecimal for now.
Thanks, again!
Cheers,
Dan