summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2008-02-11 22:53:01 (GMT)
committerRaymond Hettinger <python@rcn.com>2008-02-11 22:53:01 (GMT)
commit48688d8c8e15fa5cef253e047af96e79a3463cf6 (patch)
treeb7c120222b61b0a7a3e65becfe2f2733b487d435
parent21290eacf6eb3ebaf01edbe4c69994aa103d608e (diff)
downloadcpython-48688d8c8e15fa5cef253e047af96e79a3463cf6.zip
cpython-48688d8c8e15fa5cef253e047af96e79a3463cf6.tar.gz
cpython-48688d8c8e15fa5cef253e047af96e79a3463cf6.tar.bz2
Add notes on how decimal fits into the model.
-rw-r--r--Lib/numbers.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/Lib/numbers.py b/Lib/numbers.py
index cbceced..4728f99 100644
--- a/Lib/numbers.py
+++ b/Lib/numbers.py
@@ -49,6 +49,35 @@ Inexact.register(float)
# Inexact.register(decimal.Decimal)
+## Notes on Decimal and how relates to the numeric tower
+## -----------------------------------------------------
+## Decimal is Real except that it does not support the real and imag properties
+## or the conjugate() and complex() methods. If those get defined at some
+## point, they cannot use the default implementation which would be sensitive
+## to decimal.Context and could produce different answers at different times.
+##
+## Decimal has some of the characteristics of Integrals. It provides
+## logical operations but not as operators. The logical operations only apply
+## to a subset of decimals (those that are non-negative, have a zero exponent,
+## and have digits that are only 0 or 1). It does provide __long__() and
+## a three argument form of __pow__ that includes exactness guarantees.
+## It does not provide an __index__() method.
+##
+## Depending on context, decimal operations may be exact or inexact.
+##
+## When decimal is run in a context with small precision and automatic rounding,
+## it is Inexact. See the "Floating point notes" section of the decimal docs
+## for an example of losing the associative and distributive properties of
+## addition.
+##
+## When decimal is used for high precision integer arithmetic, it is Exact.
+## When the decimal used as fixed-point, it is Exact.
+## When it is run with sufficient precision, it is Exact.
+## When the decimal.Inexact trap is set, decimal operations are Exact.
+## For an example, see the float_to_decimal() recipe in the "Decimal FAQ"
+## section of the docs -- it shows an how traps are used in conjunction
+## with variable precision to reliably achieve exact results.
+
class Complex(Number):
"""Complex defines the operations that work on the builtin complex type.