<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>prePEP: Decimal data type</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Here I send it.</FONT>
</P>

<P><FONT SIZE=2>Suggestions and all kinds of recomendations are more than welcomed.</FONT>
</P>

<P><FONT SIZE=2>If it all goes ok, it'll be a PEP when I finish writing/modifying the code.</FONT>
</P>

<P><FONT SIZE=2>Thank you.</FONT>
</P>

<P><FONT SIZE=2>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Facundo</FONT>
</P>
<BR>

<P><FONT SIZE=2>------------------------------------------------------------------------</FONT>
</P>

<P><FONT SIZE=2>PEP: XXXX</FONT>
<BR><FONT SIZE=2>Title: Decimal data type</FONT>
<BR><FONT SIZE=2>Version: $Revision: 0.1 $</FONT>
<BR><FONT SIZE=2>Last-Modified: $Date: 2003/10/31 15:25:00 $</FONT>
<BR><FONT SIZE=2>Author: Facundo Batista &lt;fbatista@unifon.com.ar&gt;</FONT>
<BR><FONT SIZE=2>Status: Draft</FONT>
<BR><FONT SIZE=2>Type: Standards Track</FONT>
<BR><FONT SIZE=2>Content-Type: text/x-rst</FONT>
<BR><FONT SIZE=2>Created: 17-Oct-2003</FONT>
<BR><FONT SIZE=2>Python-Version: 2.3.3</FONT>
</P>
<BR>

<P><FONT SIZE=2>Abstract</FONT>
<BR><FONT SIZE=2>========</FONT>
</P>

<P><FONT SIZE=2>The idea is to have a Decimal data type, for every use where decimals are</FONT>
<BR><FONT SIZE=2>needed but floating point is too inexact.</FONT>
</P>

<P><FONT SIZE=2>The Decimal data type should support the Python standard functions and</FONT>
<BR><FONT SIZE=2>operations and must comply the decimal arithmetic ANSI standard X3.274-1996.</FONT>
</P>
<BR>

<P><FONT SIZE=2>Rationale</FONT>
<BR><FONT SIZE=2>=========</FONT>
</P>

<P><FONT SIZE=2>I must separate the requeriments in two sections.&nbsp; The first is to comply</FONT>
<BR><FONT SIZE=2>with the ANSI standard.&nbsp; All the needings for this are specified in the</FONT>
<BR><FONT SIZE=2>Mike Cowlishaw's work at <A HREF="http://www2.hursley.ibm.com/decimal/" TARGET="_blank">http://www2.hursley.ibm.com/decimal/</A>.&nbsp; Cowlishaw's</FONT>
<BR><FONT SIZE=2>also provided a **lot** of test cases.&nbsp; The second section of requeriments</FONT>
<BR><FONT SIZE=2>(standard Python functions support, usability, etc) are detailed in the</FONT>
<BR><FONT SIZE=2>`Requirements`_ section.&nbsp; </FONT>
</P>

<P><FONT SIZE=2>Here I'll include all the decisions made and why, and all the subjects still</FONT>
<BR><FONT SIZE=2>being discussed.&nbsp; The requirements will be numbered, to simplify discussion</FONT>
<BR><FONT SIZE=2>on each point.</FONT>
</P>

<P><FONT SIZE=2>This work is based on code and test functions written by Eric Price, Aahz and</FONT>
<BR><FONT SIZE=2>Tim Peters.&nbsp; Actually I'll work on the Decimal.py code in the sandbox (at</FONT>
<BR><FONT SIZE=2>python/nondist/sandbox/decimal in SourceForge).&nbsp; Some of the explanations of</FONT>
<BR><FONT SIZE=2>this PEP are taken from the Cowlishaw's work.</FONT>
</P>
<BR>

<P><FONT SIZE=2>Items In Discussion</FONT>
<BR><FONT SIZE=2>-------------------</FONT>
</P>

<P><FONT SIZE=2>When in a case like ``Decimal op otherType`` (see point 12 in Requirements_</FONT>
<BR><FONT SIZE=2>for details), what should happen?</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp; if otherType is an int or long:</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. an exception is raised</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. otherType is converted to Decimal </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. Decimal is converted to int or long (with ``int()`` or ``long()``)</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; if otherType is a float:</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d. an exception is raised</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e. otherType is converted to Decimal (rounding? see next item in</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; discussion)</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f. Decimal is converted to float (with ``float()``)</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; if otherType is a string:</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g. an exception is raised</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h. otherType is converted to Decimal</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i. Decimal is converted to string (bizarre, huh?)</FONT>
</P>
<BR>

<P><FONT SIZE=2>When passing floating point to the constructor, what should happen?</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp; j. ``Decimal(1.1) == Decimal('1.1')``</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; k. ``Decimal(1.1) == Decimal('110000000000000008881784197001252...e-51')``</FONT>
</P>
<BR>

<P><FONT SIZE=2>Requirements&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>============</FONT>
</P>

<P><FONT SIZE=2>1. The syntax should be ``Decimal(value)``.</FONT>
</P>

<P><FONT SIZE=2>2. The value could be of the type:</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - another Decimal</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - int or long</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - float</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - string </FONT>
</P>

<P><FONT SIZE=2>3. To exist a Context.&nbsp; The context represents the user-selectable parameters</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; and rules which govern the results of arithmetic operations.&nbsp; In the</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; context the user defines:</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - what will happen with the exceptional conditions.</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - what precision will be used</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - what rounding method will be used</FONT>
</P>

<P><FONT SIZE=2>4. The Context must be omnipresent, meaning that changes to it affects all</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; the current and future Decimal instances.</FONT>
</P>

<P><FONT SIZE=2>5. The exceptional conditions should be grouped into signals, which could be</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; controlled individually.&nbsp; The context should contain a flag and a</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; trap-enabler for each signal.&nbsp; The signals should be: clamped,</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; division-by-zero, inexact, invalid-operation, overflow, rounded, subnormal</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; and underflow.</FONT>
</P>

<P><FONT SIZE=2>6. For each of the signals, the corresponding flag should be set to 1 when</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; the signal occurs.&nbsp; It is only reset to 0 by explicit user action.</FONT>
</P>

<P><FONT SIZE=2>7. For each of the signals, the corresponding trap-enabler will indicate</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; which action is to be taken when the signal occurs.&nbsp; If 0, a defined</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; result should be supplied, and execution should continue.&nbsp; If 1, the</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; execution of the operation should end and an exception should be raised.</FONT>
</P>

<P><FONT SIZE=2>8. The precision (maximum number of significant digits that can result from</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; an arithmetic operation) must be positive (greater than 0).</FONT>
</P>

<P><FONT SIZE=2>9. To have different kinds of rounding; you can choose the algorithm through</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; context:</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-down``: (Round toward 0, truncate) The discarded digits are</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ignored; the result is unchanged::</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.125 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.135 --&gt; 1.13</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-half-up``: If the discarded digits represent greater than or</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; equal to half (0.5) then the result should be incremented by 1</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (rounded up); otherwise the discarded digits are ignored::</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.125 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.135 --&gt; 1.14</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-half-even``: If the discarded digits represent greater than</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; half (0.5) then the result coefficient should be incremented by 1</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (rounded up); if they represent less than half, then the result is</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not adjusted (that is, the discarded digits are ignored); otherwise</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the result is unaltered if its rightmost digit is even, or</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; incremented by 1 (rounded up) if its rightmost digit is odd (to make</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; an even digit)::</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.125 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.135 --&gt; 1.14</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-ceiling``: If all of the discarded digits are zero or if the</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sign is negative the result is unchanged; otherwise, the result</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; should be incremented by 1 (rounded up)::</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1.123 --&gt; -1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1.128 --&gt; -1.12</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-floor``: If all of the discarded digits are zero or if the</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sign is positive the result is unchanged; otherwise, the absolute</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value of the result should be incremented by 1::</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1.123 --&gt; -1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1.128 --&gt; -1.13</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-half-down``: If the discarded digits represent greater than</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; half (0.5) then the result should be incremented by 1 (rounded up);</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; otherwise the discarded digits are ignored::</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.125 --&gt; 1.12</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.135 --&gt; 1.13</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ``round-up``: (Round away from 0) If all of the discarded digits are</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zero the result is unchanged. Otherwise, the result should be</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; incremented by 1 (rounded up)::</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.123 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.128 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.125 --&gt; 1.13</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.135 --&gt; 1.14</FONT>
</P>

<P><FONT SIZE=2>10. Strings with floats in engineering notation will be supported.</FONT>
</P>

<P><FONT SIZE=2>11. Calling repr() should do round trip, meaning that::</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m = Decimal(...)</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m == eval(repr(m))</FONT>
</P>

<P><FONT SIZE=2>12. To support the basic aritmetic (``+, -, *, /, //, **, %, divmod``) and</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; comparison (``==, !=, &lt;, &gt;, &lt;=, &gt;=, cmp``) operators in the following</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; cases:</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Decimal op Decimal</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Decimal op otherType</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - otherType op Decimal</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Decimal op= Decimal</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Decimal op= otherType</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; Check `Items In Discussion`_ to see what types could OtherType be, and</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; what happens in each case.</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2>13. To support unary operators (``-, +, abs``).</FONT>
</P>

<P><FONT SIZE=2>14. To support the built-in methods:</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - min, max</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - float, int, long</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - str, repr</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - hash</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - copy, deepcopy</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - bool (0 is false, otherwise true)</FONT>
</P>

<P><FONT SIZE=2>15. To be immutable.</FONT>
</P>
<BR>

<P><FONT SIZE=2>Reference Implementation</FONT>
<BR><FONT SIZE=2>========================</FONT>
</P>

<P><FONT SIZE=2>To be included later:</FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp; - code</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; - test code</FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp; - documentation</FONT>
</P>
<BR>

<P><FONT SIZE=2>Copyright</FONT>
<BR><FONT SIZE=2>=========</FONT>
</P>

<P><FONT SIZE=2>This document has been placed in the public domain.</FONT>
</P>
<BR>
<BR>
<BR>
<BR>

<P><B><FONT SIZE=2>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .</FONT></B></P>

<P><B><U><FONT SIZE=2>ADVERTENCIA&nbsp;</FONT></U> </B>
</P>

<P><B><FONT SIZE=2>La información contenida en este mensaje y cualquier archivo anexo al mismo, son para uso exclusivo del destinatario y pueden contener información confidencial o propietaria, cuya divulgación es sancionada por la ley. </FONT></B></P>

<P><B><FONT SIZE=2>Si Ud. No es uno de los destinatarios consignados o la persona responsable de hacer llegar este mensaje a los destinatarios consignados, no está autorizado a divulgar, copiar, distribuir o retener información (o parte de ella) contenida en este mensaje. Por favor notifíquenos respondiendo al remitente, borre el mensaje original y borre las copias (impresas o grabadas en cualquier medio magnético) que pueda haber realizado del mismo. </FONT></B></P>

<P><B><FONT SIZE=2>Todas las opiniones contenidas en este mail son propias del autor del mensaje y no necesariamente coinciden con las de Telefónica Comunicaciones Personales S.A. o alguna empresa asociada. </FONT></B></P>

<P><B><FONT SIZE=2>Los mensajes electrónicos pueden ser alterados, motivo por el cual Telefónica Comunicaciones Personales S.A. no aceptará ninguna obligación cualquiera sea el resultante de este mensaje. </FONT></B></P>

<P><B><FONT SIZE=2>Muchas Gracias.</FONT></B>
</P>

</BODY>
</HTML>