New submission from Francesco Biscani: The C++11/C99 standards define a complex infinity as a complex number in which at least one of the components is inf. Consider the Python snippet:
>>> complex(float('inf'),float('nan'))*2 (nan+nanj) This happens because complex multiplication in Python is implemented in the most straightforward way, but the presence of a nan component "infects" both components of the result and leads to a complex nan result. See also how complex multiplication is implemented in Annex G.5.1.6 of the C99 standard. It feels wrong that a complex infinity multiplied by a real number results in a complex nan. By comparison, the result given here by C/C++ is inf+nan*j. Note also this: >>> complex(float('inf'),float('nan'))+2 (inf+nanj) That is, addition has a different behaviour because it does not require mixing up the components of the operands. This behaviour has unexpected consequences when one interacts with math libraries implemented in C/C++ and accessed via Python through some wrapping tool. For instance, whereas 1./(inf+nan*j) is zero in C/C++, it becomes in Python >>> 1./complex(float('inf'),float('nan')) (nan+nanj) ---------- messages: 253283 nosy: Francesco Biscani priority: normal severity: normal status: open title: Arithmetics with complex infinities is inconsistent with C/C++ type: behavior versions: Python 2.7, Python 3.3 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25453> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com