[PYTHON MATRIX-SIG] floating point equalities

Hinsen Konrad hinsenk@ere.umontreal.ca
Tue, 23 Jan 1996 15:29:31 -0500

   Note: part of why this came up is the fact that on my development
   system (1j)**2 == (-1+1.22460635382e-16j).  I'd really like to be able
   to have some way to say approxEqual((1j)**2, -1) and have it come out

Are you sure that you have installed the latest version of my complex
object? It should give 1j**2 == -1., exactly.  The reason is that
complex_power() detects that the exponent is actually an integer (no
fractional or imaginary part), and then calls c_powi(), which in turn
calls c_powu() because the exponent is positive and less than
100. c_powu() reduces the power calculation to an optimized sequence
of multiplications. Therefore 1j**2 is exactly equivalent to
1j*1j. (And yes, I have traced this example with a debugger right now
because I was a bit worried).

What does 1j*1j give on your system? It ought to be exactly -1., since
there are no round-off errors in this calculation.

I realize that this has nothing to do with doing comparisons in
general, of course...

Konrad Hinsen                     | E-Mail: hinsenk@ere.umontreal.ca
Departement de chimie             | Tel.: +1-514-343-6111 ext. 3953
Universite de Montreal            | Fax:  +1-514-343-7586
C.P. 6128, succ. Centre-Ville     | Deutsch/Esperanto/English/Nederlands/
Montreal (QC) H3C 3J7             | Francais (phase experimentale)

MATRIX-SIG  - SIG on Matrix Math for Python

send messages to: matrix-sig@python.org
administrivia to: matrix-sig-request@python.org