Python 2.4 does not marshal infinity floating point properly under Win32

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Pierre Rouleau

    #1

    Python 2.4 does not marshal infinity floating point properly under Win32

    Hi all,

    When using Python 2.4.x on a Win32 box,
    marshal.loads(m arshal.dumps(1e 66666)) returns 1.0 instead of infinity
    as it should and does under Python 2.5 (also running on Win32 ).

    This problem was reported in another thread here by Peter Hansen


    Is this considered an important enough bug to fix it in Python 2.4?



    The following script exercise the problem when executed::

    #---------------------------test_marshal.py--------------------------------------------------
    import marshal

    INFINITY = 1e66666
    inf = 1e300 * 1e300
    nan = inf - inf


    def show(title, msg):
    print '%-10s : ' % title,
    msg2 = ''
    count = 0
    for chr in msg:
    count += 1
    val = ord(chr)
    print hex(val),
    if 31 < val < 128:
    msg2 += chr
    else:
    msg2 += '.'
    print ' ' * (9-count), ' : ', msg2



    show('Nan', marshal.dumps(n an))
    show('Infinity' , marshal.dumps(I NFINITY))
    show('Infinity' , marshal.dumps(i nf))
    show('Infinity' , marshal.dumps(1 e666))

    val = marshal.loads(m arshal.dumps(1e 666))
    print val
    val = marshal.loads(m arshal.dumps(IN FINITY))
    print val
    assert val==INFINITY
    #-------------------------------------------------------------------------------------------------------



    When running the script on Win32 box with Python 2.4.3 or 2.4.4 I get::

    D:\dev\python\t est>t_marshal
    Nan : 0x66 0x7 0x2d 0x31 0x2e 0x23 0x49 0x4e 0x44 :
    f.-1.#IND
    Infinity : 0x66 0x6 0x31 0x2e 0x23 0x49 0x4e 0x46 : f.1.#INF
    Infinity : 0x66 0x6 0x31 0x2e 0x23 0x49 0x4e 0x46 : f.1.#INF
    Infinity : 0x66 0x6 0x31 0x2e 0x23 0x49 0x4e 0x46 : f.1.#INF
    1.0
    1.0
    Traceback (most recent call last):
    File "D:\dev\python\ test\t_marshal. py", line 33, in ?
    assert val==INFINITY
    AssertionError

    But when running the same script on a Win32 box, using Python 2.5, I
    get::

    C:\dev\python\t est>t_marshal
    Nan : 0x67 0x0 0x0 0x0 0x0 0x0 0x0 0xf8 0xff : g........
    Infinity : 0x67 0x0 0x0 0x0 0x0 0x0 0x0 0xf0 0x7f : g.......¦
    Infinity : 0x67 0x0 0x0 0x0 0x0 0x0 0x0 0xf0 0x7f : g.......¦
    Infinity : 0x67 0x0 0x0 0x0 0x0 0x0 0x0 0xf0 0x7f : g.......¦
    1.#INF
    1.#INF


    #-------------------------------------------------



    --

    Pierre Rouleau

  • Grant Edwards

    #2
    Re: Python 2.4 does not marshal infinity floating point properly under Win32

    On 2006-11-30, Pierre Rouleau <prouleau001@gm ail.comwrote:
    When using Python 2.4.x on a Win32 box,
    marshal.loads(m arshal.dumps(1e 66666)) returns 1.0 instead of infinity
    as it should and does under Python 2.5 (also running on Win32 ).
    >
    This problem was reported in another thread here by Peter Hansen

    >
    Is this considered an important enough bug to fix it in Python 2.4?
    This must be at least the third thread on this topic so far
    this week. And I didn't start _any_ of them (this week).

    :)

    --
    Grant Edwards grante Yow! Imagine--a WORLD
    at without POODLES...
    visi.com

    Comment

    • Martin v. Löwis

      #3
      Re: Python 2.4 does not marshal infinity floating point properlyunder Win32

      Pierre Rouleau schrieb:
      Is this considered an important enough bug to fix it in Python 2.4?
      To the contrary - it's not considered a bug at all. Python didn't
      make any promises about "unregular" floating point values, so things
      like that just may happen.

      The fix that made Python offer stronger guarantees in 2.5 cannot
      be ported back to 2.4, since it would break the marshal format of
      that release.

      Finally, it's not very likely that *any* additional 2.4.x releases
      are made at all; only 2.5.x is still actively maintained.

      Regards,
      Martin

      Comment

      Working...