I ran into the following very strange product in C#. The test below passes.

```
public void InfinityTimesITest() {
  Complex infinity = new Complex(double.PositiveInfinity, 0);
  Complex i = new Complex(0, 1);
  Complex product = infinity * i;
  double real = product.Real;
  double imaginary = product.Imaginary;
  Assert.IsNaN(real);
  Assert.IsTrue(Double.IsPositiveInfinity(imaginary));
}

```

It also passes if you reverse the order of terms in the product. But thinking about this mathematically, what C# appears to be saying is:

```
 infinity * i = (real NaN) + infinity * i.

```

That seems like a strange choice. There must be some thinking behind it. I'm hoping someone here can provide some insight into what is going on.