off topic but please forgive me me and answer

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Thu Apr 1 22:44:40 EDT 2010


On Thu, 01 Apr 2010 19:49:43 -0500, Tim Chase wrote:

> David Robinow wrote:
>> $ python -c "print 1/2 * 1/2"
>> 0
>> 
>>  But that's not what I learned in grade school.
>> (Maybe I should upgrade to 3.1?)
> 
> That's because you need to promote one of them to a float so you get a
> floating-point result:
> 
>    >>> 1/2 * 1/2
>    0
>    >>> 1/2 * 1/2.0
>    0.0
> 
> Oh...wait ;-)

Tim, I'm sure you know the answer to this, but for the benefit of the 
Original Poster, the problem is that you need to promote *both* divisions 
to floating point. Otherwise one of them will give int 0, which gives 0.0 
when multiplied by 0.5.

>>> 1.0/2 * 1/2.0
0.25


If you want an exact result when multiplying arbitrary fractions, you 
need to avoid floats and decimals and use Fractions:

>>> Fraction(1, 2)**2
Fraction(1, 4)



-- 
Steven



More information about the Python-list mailing list