PYTH 1.2 NO IDEA Avatar
  1. OMG Issue

PYTH12 — Python mapping issue: fixed point

  • Key: PYTH12-5
  • Legacy Issue Number: 4658
  • Status: closed  
  • Source: AT&T ( Duncan Grisby)
  • Summary:

    The Python mapping for fixed point types is slightly unclear, and
    could benefit from a few of the facilities from other language
    mappings.

    Below, I've written a proposed specification to replace the existing
    section on fixed point. The changes are:

    • replace "foo" and "bar" with "digits" and "scale"
    • clarify meaning of integers used in constructor and value() method
    • add a constructor taking a string
    • correct "loss of precision" to be "overflow"
    • add requirement for string conversion with str()
    • add round() and truncate() methods
    • clarify usage of CORBA.fixed() and add string-based versions
    • relax the requirement that certain entities are classes

    Here is the suggested replacement text:

    ------
    IDL of the form

    typedef fixed<digits,scale> MyFixed;

    is mapped as follows:

    • A constructor MyFixed() expecting either a string representing the
      fixed point value, or an integer type representing the digits of
      the value.

    The string form of the constructor accepts a string representation
    of a fixed point literal, with the trailing 'd' or 'D' optional.
    The value is truncated if too many digits are given after the
    decimal point. If there are too many digits before the decimal
    point, or the string is not a valid fixed point value, a
    CORBA.DATA_CONVERSION exception is raised.

    The integer form of the constructor accepts a Python integer or
    long integer, representing the digits of the fixed point value.
    The integer is numerically the fixed point value * 10 ** scale.
    If the integer has too many digits, CORBA.DATA_CONVERSION is
    raised.

    e.g. given IDL:

    typedef fixed<5,2> MyFixed;

    the following is true:

    MyFixed("123.45") == MyFixed(12345)

    • To facilitate the use of anonymous fixed point values, a generic
      CORBA.fixed() constructor is provided. Its arguments take three
      possible forms:
    • A single string representing the fixed point value, with a
      trailing 'd' or 'D' optional. The resulting fixed point value
      derives its digits and scale from the string. Raises
      DATA_CONVERSION if the value exceeds the size of CORBA fixed,
      or the string is invalid.
    • The digits and scale values, followed by a conforming string.
      The string is treated as with named types described above.
    • The digits and scale values, followed by a conforming integer or
      long integer. The integer is treated as with named types
      described above.

    e.g.

    a = CORBA.fixed("123.45")
    b = CORBA.fixed(5, 2, "123.45")
    c = CORBA.fixed(5, 2, 12345)
    assert(a == b)
    assert(b == c)

    The result of calling either kind of constructor is an object with the
    following properties:

    • Numeric operators for addition, subtraction, multiplication, and
      division, both of two fixed point numbers, and in combination with
      integers. A DATA_CONVERSION exception is raised if the operation
      results in an overflow.
    • Operations as follows:
    • value() returns an integer or long integer representing the
      digits of the fixed point number, in the form accepted by the
      constructors.
    • precision() returns the number of digits.
    • decimals() returns the scale.
    • round(scale) returns a new fixed point number containing the
      original number rounded to the specified scale.
    • truncate(scale) returns a new fixed point number containing the
      original number truncated to the specified scale.
    • When a fixed point number is passed to the standard str()
      function, a string representing the fixed point value is returned.
      The string does not contain a trailing 'd'.
  • Reported: PYTH 1.1 — Mon, 5 Nov 2001 05:00 GMT
  • Disposition: Resolved — PYTH 1.2
  • Disposition Summary:

    Accept the suggested changes

  • Updated: Fri, 6 Mar 2015 20:58 GMT