Re: Simple calculation error

Discussion in 'Python' started by Fredrik Lundh, Jan 4, 2008.

  1. Francois Liot wrote:
    >
    > I observed a strange calculation answer, on both python 2.3.4 and 2.4.4
    >
    >> >> print 753343.44 - 753361.89

    >
    > -18.4500000001
    >
    >> >> print ( (753361.89*100) - (753343.44*100) ) / 100

    >
    > 18.45
    >
    > Can somebody help me to play correctly with decimal values?


    A 64-bit binary floating point number can hold values between -1e308 and
    +1e308, in only 64 bits of memory. Since 1e308 is a *lot* larger than
    float(2**64) = ~1.8e19, it does this by splitting the number in a binary
    fraction, and a multiplier (stored as an exponent).

    Unfortunately, very few decimal fractions can be *exactly* represented
    as binary fractions, so you often get representation errors:

    http://docs.python.org/tut/node16.html

    This is usually not much of a problem, since you usually end up rounding
    things to a suitable number of decimals or significant digits when you
    print them anyway (see below), but repr() doesn't do that -- it always
    outputs enough digits to get back the *exact* binary representation if
    you convert the string back to a floating point value again.

    In practice, you can usually ignore this; just use the appropriate
    output methods, and things will just work:

    While pathological cases do exist, for most casual use of
    floating-point arithmetic you'll see the result you expect
    in the end if you simply round the display of your final
    results to the number of decimal digits you expect. str()
    usually suffices, and for finer control see the discussion
    of Python's % format operator: the %g, %f and %e format codes
    supply flexible and easy ways to round float results for
    display.

    (from the above link)

    If you really need full control over this, no matter what, use the
    Decimal type, as provided by the decimal module in the standard library.
    See the library reference for the full story.

    </F>
    Fredrik Lundh, Jan 4, 2008
    #1
    1. Advertising

  2. Fredrik Lundh

    Paul McGuire Guest

    On Jan 4, 12:30 pm, Fredrik Lundh <> wrote:
    > Francois Liot wrote:
    >
    > > I observed a strange calculation answer, on both python 2.3.4 and 2.4.4

    >
    > >> >> print 753343.44 - 753361.89

    >
    > > -18.4500000001

    >
    > >> >> print ( (753361.89*100) - (753343.44*100) ) / 100

    >
    > > 18.45

    >
    > > Can somebody help me to play correctly with decimal values?

    >


    If the OP is questioning the change in sign, the operands are reversed
    in the second statement.

    -- Paul
    Paul McGuire, Jan 4, 2008
    #2
    1. Advertising

  3. No the change of sign is due to a fake copy and past,
    My question was related to decimal calculation.

    Thanks,

    Francois Liot

    -----Original Message-----
    From: python-list-bounces+fliot= [mailto:python-list-bounces+fliot=] On Behalf Of Paul McGuire
    Sent: Friday, January 04, 2008 1:46 PM
    To:
    Subject: Re: Simple calculation error

    On Jan 4, 12:30 pm, Fredrik Lundh <> wrote:
    > Francois Liot wrote:
    >
    > > I observed a strange calculation answer, on both python 2.3.4 and 2.4.4

    >
    > >> >> print 753343.44 - 753361.89

    >
    > > -18.4500000001

    >
    > >> >> print ( (753361.89*100) - (753343.44*100) ) / 100

    >
    > > 18.45

    >
    > > Can somebody help me to play correctly with decimal values?

    >


    If the OP is questioning the change in sign, the operands are reversed
    in the second statement.

    -- Paul
    --
    http://mail.python.org/mailman/listinfo/python-list
    Francois Liot, Jan 4, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Badass Scotsman
    Replies:
    1
    Views:
    367
    S. Justin Gengo
    Apr 24, 2006
  2. Replies:
    2
    Views:
    374
    Steven D'Aprano
    Mar 4, 2007
  3. serkany
    Replies:
    6
    Views:
    1,148
    JohnDuq
    Apr 17, 2009
  4. Replies:
    9
    Views:
    136
    Randy Webb
    Jan 25, 2006
  5. Replies:
    10
    Views:
    179
    Hardono Arifanto
    Apr 4, 2007
Loading...

Share This Page