M
Mark H. Harris
. . . Calling Decimal on a float performs an exact binary to
decimal conversion. Your reasoning essentially assumes that every
float should be interpreted as an approximate representation for a
nearby decimal value.
That is the whole point exactly. Yes, the exact binary to decimal conversion for float is the problem precisely. But my solution does not assume anysuch thing... because the decimal module is "advertised" to support what I'm doing. In other words, decimal correctly builds from a string literal in any case; even intermediary values. Well, the digits past 16 (for a double) aren't valid anyway... and the ones before that (when passed to decimalas a string) get correctly created as a decimal object.
But here is the other point... I am not planning on passing *any* of thesefunctions a float... my system that uses dmath uses strings only, or decimals. str(Decimal) works, as does Decimal(str()). So, I'm not reallyinterested in floats at all... but, and here's the big BUT, I'm expecting folks to use dmath.py from the console (as I plan to) and they are going to punch in *floats*. why? because its natural.
Its just easier to type D(2.78) than Deciaml('2.78').
Neither here nor there.... but the frustration is the fact that floats are so 1982. Know what I mean? This is the 21st century, and you know what, we have got to get past this:
In other words, we need to move to a numeric system of computation (decimal is a good start) that does not keep track of real values as IEEE floats.Back in the day, that was ok... today, its unacceptable.
So, Krah has a really nice (and fast) module that will help at least the python community (and users) to move into the 21st century. My hat is off to Stefan, that's for sure.
I am going to keep playing with this, and making the changes you have suggested... I'll put the code back up there on code.google and see if I can make the repository work like its supposed to..
Thanks again for your assistance, I really appreciate it, Oscar.