<div><span class="gmail_quote">On 1/24/07, <b class="gmail_sendername">Gareth McCaughan</b> &lt;<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:gareth.mccaughan@pobox.com" target="_blank">gareth.mccaughan@pobox.com
</a>&gt; wrote:</span></div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">[Alexey:]<br>&gt; I think that&#39;s the right thing to do, because that is mathematically<br>&gt; correct. j is just an imaginary number with a property that j*j = -1. So 
<br>&gt; (a+bj) + (c+dj)j = (a-d) + (b+c)j.<br><br>Yes, thanks, I know what j is, and I know how to multiply<br>complex numbers. (All of which you could have deduced from<br>reading what I wrote, as it happens.) The question is whether 
<br>it makes sense to define complex(a,b) = a+ib for all a,b<br>or whether the two-argument form is always in practice going<br>to be used with real numbers[1]. If it is, which seems pretty<br>plausible to me, then changing complex() to complain when 
<br>passed two complex numbers would (1) notify users sooner<br>when they have errors in their programs, (2) simplify the<br>code, and (3) avoid the arguably broken behaviour Tim was<br>remarking on, where complex(-0.0).real is +0 instead of -0. 
</blockquote>
<div>&nbsp;</div>
<div>Haven&#39;t looked in source code for complex constructor yet, but I think that if it changes sign of -0.0 then it just does something wrong and needs fixing without change in behaviour. Maybe it could check if numbers it got on input are real or complex and proceed accordingly so that it never gets to computing -
0.0-(+0.0), i.e. when second argument is not a complex number it could just add it to imaginary part of first argument, but skip substracting inexistant 0.0 from first argument&#39;s real part. Change of behaviour like ignoring imaginary part of second argument seems bad to me, and that&#39;s my only point. Besides, documentation (at least for Python 
2.4) clearly states that second argument can be a complex number:</div>
<div>&nbsp;</div>
<div>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr valign="baseline">
<td><b><tt class="function" id="l2h-17" id="l2h-17">complex</tt></b>(</td>
<td><var></var><big>[</big><var>real</var><big>[</big><var>, imag</var><big>]</big><var></var><big>]</big><var></var>)</td></tr></tbody></table>
<dd>Create a complex number with the value <strong><var>real</var> + <var>imag</var>*j</strong> or convert a string or number to a complex number. If the first parameter is a string, it will be interpreted as a complex number and the function must be called without a second parameter. The second parameter can never be a string. Each argument may be 
<strong>any numeric type</strong> (<strong>including complex</strong>). If <var>imag</var> is omitted, it defaults to zero and the function serves as a numeric conversion function like <tt class="function">int()</tt>, <tt class="function">
long()</tt> and <tt class="function">float()</tt>. If both arguments are omitted, returns <code>0j</code>. </dd></div>