On 2013-10-10, MRAB <pyt...@mrabarnett.plus.com> wrote:
> On 10/10/2013 16:57, Rotwang wrote:
>> On 10/10/2013 16:51, Neil Cerutti wrote:
>>> [...]
>>>
>>> Mixed arithmetic always promotes to the wider type (except in
>>> the case of complex numbers (Ha!)).
>>>
>>> r == c is equivalent to r == abs(c), which returns the magintude
>>> of the complex number.
>>
>> What?
>>
>>   >>> -1 == -1 + 0j
>> True
>>   >>> -1 == abs(-1 + 0j)
>> False
>>   >>> 1 == 0 + 1j
>> False
>>   >>> 1 == abs(0 + 1j)
>> True
>>
> Indeed.
>
> If r is real (float) and c is complex:
>
>      r == c means r == c.real and c.imag == 0.0

Woah. I thought I was going by what the docs say:

  Python fully supports mixed arithmetic: when a binary
  arithmetic operator has operands of different numeric types,
  the operand with the “narrower” type is widened to that of the
  other, where integer is narrower than floating point, which is
  narrower than complex. Comparisons between numbers of mixed
  type use the same rule. [2] The constructors int(), float(),
  and complex() can be used to produce numbers of a specific
  type.

[...]

  [2] Not for complex numbers. Instead convert to floats using
     abs() if appropriate.

I guess the "if appropriate" part eluded my eye. When *is* it
appropriate? Apparently not during an equal test.

>>> 5.0 == abs(3 + 4j)
False

-- 
Neil Cerutti
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to