# [Issue 6560] Exponentiation operator ^^ doesn't work for complex numbers

`http://d.puremagic.com/issues/show_bug.cgi?id=6560`
```

--- Comment #6 from bdsat...@gmail.com 2011-08-27 07:14:06 PDT ---

I found a workaround for ^^, looks like this works:

import std.stdio;
import std.complex;

void main()  {
auto x = Complex!real(1,2);
auto y = Complex!real(3,4);

writeln(x^^y);
}

> Please, show examples of the real problems, so Andrei & Walter will judge the
> situation.
Let's consider the same cases as mentioned in the "Semantics" section of:
http://www.digitalmars.com/d/2.0/cppcomplex.html

Well, unfortunately std.complex; in v2.051 is not up-to-date. I wanted to
verify whether the following identities hold:
* sqrt(conj(z)) == conj(sqrt(z)) whenever z takes on negative real values
* conj(log(z)) == log(conj(z)) whenever z takes on negative real values

I couldn't test the above because sqrt( ) and log( ) are not implemented for
complex numbers in 2.051. I do not know the situation in 2.055head. Could you
please verify this, if possible ?

However, I do have a testcase for this one:
* (1 - infinity*i)*i == (infinity + i) but not (infinity + NaN*i)

where i = sqrt(-1), the imaginary constant. The following demonstrates how a
"spurious NaN" is generated, as mentioned in the above link.

import std.stdio;
import std.complex;

union INFINITY {
float inf;
uint num;
};

union NOT_A_NUMBER {
float nan;
uint  num;
};

void main()  {
INFINITY posinf, neginf;
NOT_A_NUMBER nan;

posinf.num = 0x7F800000;     // positive infinity
neginf.num = 0xFF800000;     // negative infinity
nan.num = 0x7FC00000;        // Not a Number

writefln("Positive infinity = %f", posinf.inf);
writefln("Negative infinity = %f", neginf.inf);
writefln("Not a number = %f", nan.nan);

Complex!float i = Complex!float(0.0f, 1.0f);        // i
Complex!float p = Complex!float(1.0f, neginf.inf);  // 1-inf*i

writefln("%f",p*i);   // Must be (1-inf*i)*i = inf + 1i
}

The expected answer is (+inf, 1.0f) but the above prints "inf-nani".

I do not know how it was in D1, but in D2 the above produces mathematically
incorrect result. Again, I'm unaware how it is in C99/C++, etc. or is it always
like this.

--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
```