On Thu, Apr 16, 2015 at 03:11:59PM -0700, Jim Mooney wrote: > So the longer numerator and denominator would, indeed, be more accurate if > used in certain calculations rather than being normalized to a float - such > as in a Fortran subroutine or perhaps if exported to a machine with a > longer bit-length? That's mainly what I was interested in - if there is any > usable difference between the two results.
You're asking simple questions that have complicated answers which probably won't be what you are looking for. But let's try :-) Let's calculate a number. The details don't matter: x = some_calculation(a, b) print(x) which prints 1.64. Great, we have a number that is the closest possible base 2 float to the decimal 164/100. If we convert that float to a fraction *exactly*, we get: py> Fraction(1.64) Fraction(7385903388887613, 4503599627370496) So the binary float which displays as 1.64 is *actually* equal to 7385903388887613/4503599627370496, which is just a tiny bit less than the decimal 1.64: py> Fraction(1.64) - Fraction("1.64") Fraction(-11, 112589990684262400) That's pretty close. The decimal value that normally displays as 1.64 is perhaps more accurately displayed as: py> "%.23f" % 1.64 '1.63999999999999990230037' but even that is not exact. So which is the "right" answer? That depends. (1) It could be that our initial calculation some_calculation(a, b) actually was 164/100, say, in which case the *correct* result should be decimal 1.64 = Fraction("1.64") and the 7385blahblahblah/blahblahblah is just an artifact of the fact that floats are binary. (2) Or it could be that the some_calculation(a, b) result actually was 7385903388887613/4503599627370496, say, in which case it is a mere coincidence that this number displays as 1.64 when treated as a binary float. The long 7385blahblahblah numerator and denominator is exactly correct, and decimal 1.64 is a approximation. There is no way of telling in advance which interpretation is correct. You need to think about the calculation you performed and decide what it means, not just look at the final result. Although... 9 times out of 10, if you get something *close* to an exact decimal, a coincidence is not likely. If you get exactly 0.5 out of a calculation, rather than 0.5000000000001, then it probably should be exactly 1/2. *Probably*. The reality is that very often, the difference isn't that important. The difference between 1.64 inches and 1.63999999999999990230037 inches is probably not going to matter, especially if you are cutting the timber with a chainsaw. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor