
Michael's PEP touches upon the one difficult area of decimal semantics: what to do when a decimal and a binary float meet? We discussed this briefly over lunch here and Tim pointed out that the default should probably be an error: code expecting to work with exact decimals should be allowed to continue after contamination with an inexact binary float. But in other contexts it would make more sense to turn mixed operands into inexact, like what currently happens when int/long meets float. In the IBM model that Aahz is implementing, decimal numbers are not necessarily exact, but (if I understand correctly) you can set a context flag that causes an exception to be raised when the result of an operation on two exact inputs is inexact. This can happen when e.g. a multiplication result exceeds the number of significant digits specified in the context -- then truncation is applied like for binary floats. Could the numeric tower look like this? int < long < decimal < rational < float < complex ******************************* *************** exact inexact A numeric context could contain a flag that decides what happens when exact and inexact are mixed. --Guido van Rossum (home page: http://www.python.org/~guido/)