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