Surprise with special floating point values

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • prouleau001@gmail.com

    #1

    Surprise with special floating point values

    Hi all,

    While trying to use simplejson under Python 2.4.3 I have been
    investigating the handling of special floating point values and found
    that both Python 2.4 and 2.5 return False when comparing a NaN with
    itself. Although surprising, I imagine it could also be correct since
    NaN is not a number. But is it correct?

    Notice the result of comparing c with itself in the following Python
    2.5 session (it works the same on Python 2.4.3) under Win32::

    Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
    (Intel)] on win32
    Type "help", "copyright" , "credits" or "license" for more information.
    >>a = 1e300 * 1e300
    >>a
    1.#INF
    >>b = 1e66666
    >>b
    1.#INF
    >>a == b
    True
    >>c = a - a
    >>c
    -1.#IND
    >>d = b - b
    >>d
    -1.#IND
    >>c == d
    False
    >>c == c
    False
    >>b == b
    True
    >>a == a
    True
    >>a is a
    True
    >>b is b
    True
    >>c is c
    True
    >>d is d
    True
    >>>
    Thanks,

    --
    Pierre Rouleau

  • prouleau001@gmail.com

    #2
    Re: Surprise with special floating point values



    On Nov 29, 12:53 pm, prouleau...@gma il.com wrote:
    Hi all,
    >
    While trying to use simplejson under Python 2.4.3 I have been
    investigating the handling of special floating point values and found
    that both Python 2.4 and 2.5 return False when comparing a NaN with
    itself. Although surprising, I imagine it could also be correct since
    NaN is not a number. But is it correct?
    And of course it is correct... As NaN does not compare with itself in
    floating point: http://en.wikipedia.org/wiki/NaN

    Should have read it earlier...

    --
    Pierre Rouleau

    Comment

    • Fredrik Lundh

      #3
      Re: Surprise with special floating point values

      prouleau001@gma il.com wrote:
      While trying to use simplejson under Python 2.4.3 I have been
      investigating the handling of special floating point values
      note that JSON doesn't support non-numeric floating point values, as can
      be seen by the "number" syntax description on this page:



      (and as I pointed out in another thread on this topic, Python relies on
      the C library for serialization of floats, so non-numeric floating point
      values aren't portable between Python versions either).

      </F>

      Comment

      • prouleau001@gmail.com

        #4
        Re: Surprise with special floating point values



        On Nov 29, 1:11 pm, Fredrik Lundh <fred...@python ware.comwrote:
        prouleau...@gma il.com wrote:
        While trying to use simplejson under Python 2.4.3 I have been
        investigating the handling of special floating point valuesnote that JSON doesn't support non-numeric floating point values, as can
        be seen by the "number" syntax description on this page:
        >

        >
        (and as I pointed out in another thread on this topic, Python relies on
        the C library for serialization of floats, so non-numeric floating point
        values aren't portable between Python versions either).
        >
        </F>
        That's true, but I ran into a problem with simplejson under Python
        2.4.3 on Win32, where it fails to serialize 1.0 properly (and I
        reported the problem to its author, and the fact that it works fine
        under Python 2.5). There is another thread (Inconsistency producing
        constant for float "infinity") that talks about differences between
        Python 2.5 and earlier versions regarding treatment of non-numeric
        floating point values. So, while investigating the simplejson problem,
        I though I had found a problem with the handling of NaN (which
        obviously is not the case).

        - Pierre R.

        Comment

        Working...