[Python-Dev] New operations in Decimal

Facundo Batista facundo at taniquetil.com.ar
Fri Apr 27 20:39:50 CEST 2007


The following are the new operations in the decimal module that we'll
be available according to the last published specification.

I wrote here the proposed name by me, the original name between
parenthesis, where it will be located between square brackets (C for
context and D for the decimal object itself), and a small description
of the operation (I specially trimmed the verbose special cases from
the description, if you want an exact explanation of what does each,
read the spec).

Note that always it says how many operands it takes. The number
implies you're calling it through the context. If called through
Decimal, you have to substract one from it (as the first operand will
be the number itself in this case).

Enjoy it, and any feedback is very appreciated, :)


- compare_signal (compare–signal) [CD]: Takes two operands and
  compares their values numerically (pretty much like compare(), but all
  NaNs signal, with signaling NaNs taking precedence over quiet NaNs. 

- fma (fused-multiply-add) [C]: Takes three operands; the first two are
  multiplied together, using multiply, the third operand is then added
  to the result of that multiplication, using add, all with only one
  final rounding.

- ln (ln) [CD]: Takes one operand, and the result is the natural (base
  e) logarithm of the operand.

- log10 (log10) [CD]: Takes one operand, and the result is the base 10
  logarithm of the operand.

- max_mag (max–magnitude), and min_mag (min-magnitude) [CD]: Takes two
  operands and compares their values numerically with their sign
  ignored. 

- next_minus (next–minus) [CD]: Takes one operand and the result is the
  largest representable number that is smaller than the operand.

- next_plus (next–plus) [CD]: Takes one operand and the result is the
  smallest representable number that is larger than the operand.

- next_toward (next–toward) [CD]: Takes two operands and the result is
  the representable number closest to the first operand (but not the
  first operand) that is in the direction towards the second operand,
  unless the operands have the same value.

- to_integral_exact (round-to-integral-exact) [C]: Takes one operand. It
  is similar to the round–to–integral–value (the old to_integral), with
  the difference the now Inexact and Rounded flags are allowed in the
  result.


The following operations appear in a new section of the specification
called "Miscelaneous Operations". Between these are logical
operations that take logical operands, which are finite positive
non-exponent numbers with a coefficient whose digits must all be either
0 or 1.

- and (and), or (or), xor (xor) [CD]: Takes two logical operands, the
  result is the logical operation applied between each digit.

- canonical (canonical) [CD]: Canonical takes one operand, returns the
  same Decimal object, as we do not have different encodings for the
  same number.

- number_class (class) [CD]: Takes one operando, returns an indication
  of the class of the operand, where the class is one of the following:
  "sNaN", "NaN", "–Infinity", "–Normal", "–Subnormal", "–Zero", "+Zero",
  "+Subnormal", "+Normal" or "+Infinity".

- compare_total (compare–total) [CD]: Takes two operands and compares
  them using their abstract representation rather than their numerical
  value (a total ordering is defined for all possible abstract
  representations).

- compare_total_mag (compare–total–magnitude) [CD]: Takes two operands
  and compares them using their abstract representation rather than
  their numerical value, with their sign ignored and assumed to be 0.

- copy_abs (copy-abs) [CD]: Takes one operand, returns a copy of it
  with the sign set to 0.

- copy_negate (copy-negate) [CD]: Takes one operand, returns a copy of
  it with the sign inverted.

- copy_sign (copy–sign) [CD]: Takes two operands, returns a copy of the
  first operand with the sign equal to the sign of the second operand.

- invert (invert) [CD]: Takes one logical operand, the result is the
  digit-wise inversion of the operand. 

- is-canonical (is–canonical) [CD]: Takes one operand, returns 1 if the
  operand is canonical; otherwise returns 0. 

- is_finite (is–finite) [CD]: Takes one operand, returns 1 if the
  operand is neither infinite nor a NaN, otherwise returns 0. 

- is_infinite (is–infinite) [CD]: Takes one operand, returns 1 if the
  operand is an Infinite, otherwise returns 0. 

- is_nan (is–NaN) [CD]: Takes one operand, returns 1 if the operand is
  a quiet or signaling NaN, otherwise returns 0. 

- is_normal (is–normal) [CD]: Takes one operand, returns 1 if the
  operand is a positive or negative normal number, otherwise returns 0. 

- is_qnan (is–qNaN) [CD]: Takes one operand, returns 1 if the operand
  is a quiet NaN, otherwise returns 0. 

- is_signed (is–signed) [CD]: Takes one operand, returns 1 if the sign
  of the operand is 1, otherwise returns 0. 

- is_snan (is–sNaN) [CD]: Takes one operand, returns 1 if the operand
  is a signaling NaN, otherwise returns 0.   

- is_subnormal (is–subnormal) [CD]: Takes one operand, returns 1 if the
  operand is a positive or negative subnormal number, otherwise returns
  0.

- is_zero (is–zero) [CD]: Takes one operand, returns 1 if the operand
  is a zero, otherwise returns 0. 

- logb (logb) [CD]: Takes one operand, returns the integer which is the
  exponent of the magnitude of the most significant digit of the operand
  (as though the operand were truncated to a single digit while
  maintaining the value of that digit and without limiting the resulting
  exponent). 

- radix (radix) [CD]: Takes no operands, returns 10.

- rotate (rotate) [CD]: Takes two operands. The coefficient of the
  result is a rotated copy of the digits in the coefficient of the first
  operand. The number of places of rotation is taken from the absolute
  value of the second operand, with the rotation being to the left if
  the second operand is positive or to the right otherwise.

- scaleb (scaleb) [CD]: Takes two operands. The result is the first
  operand modified by adding the value of the second operand to its
  exponent. 

- shift (shift) [CD]: Takes two operands. The coefficient of the result
  is a shifted copy of the digits in the coefficient of the first
  operand. The number of places to shift is taken from the absolute
  value of the second operand, with the shift being to the left if the
  second operand is positive or to the right otherwise. Digits shifted
  into the coefficient are zeros.


Regards,

-- 
.   Facundo
.
Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/




More information about the Python-Dev mailing list