public void CanComputePower() { var a = new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7); var b = new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7); AssertHelpers.AlmostEqualRelative( new Complex(9.99998047207974718744e-1, -1.76553541154378695012e-6), a.Power(b), 14); a = new Complex(0.0, 1.19209289550780998537e-7); b = new Complex(0.0, -1.19209289550780998537e-7); AssertHelpers.AlmostEqualRelative(new Complex(1.00000018725172576491, 1.90048076369011843105e-6), a.Power(b), 14); a = new Complex(0.0, -1.19209289550780998537e-7); b = new Complex(0.0, 0.5); AssertHelpers.AlmostEqualRelative(new Complex(-2.56488189382693049636e-1, -2.17823120666116144959), a.Power(b), 14); a = new Complex(0.0, 0.5); b = new Complex(0.0, -0.5); AssertHelpers.AlmostEqualRelative(new Complex(2.06287223508090495171, 7.45007062179724087859e-1), a.Power(b), 14); a = new Complex(0.0, -0.5); b = new Complex(0.0, 1.0); AssertHelpers.AlmostEqualRelative(new Complex(3.70040633557002510874, -3.07370876701949232239), a.Power(b), 14); a = new Complex(0.0, 2.0); b = new Complex(0.0, -2.0); AssertHelpers.AlmostEqualRelative(new Complex(4.24532146387429353891, -2.27479427903521192648e1), a.Power(b), 14); a = new Complex(0.0, -8.388608e6); b = new Complex(1.19209289550780998537e-7, 0.0); AssertHelpers.AlmostEqualRelative(new Complex(1.00000190048219620166, -1.87253870018168043834e-7), a.Power(b), 14); a = new Complex(0.0, 0.0); b = new Complex(0.0, 0.0); AssertHelpers.AlmostEqualRelative(new Complex(1.0, 0.0), a.Power(b), 14); a = new Complex(0.0, 0.0); b = new Complex(1.0, 0.0); AssertHelpers.AlmostEqualRelative(new Complex(0.0, 0.0), a.Power(b), 14); a = new Complex(0.0, 0.0); b = new Complex(-1.0, 0.0); AssertHelpers.AlmostEqualRelative(new Complex(double.PositiveInfinity, 0.0), a.Power(b), 14); a = new Complex(0.0, 0.0); b = new Complex(-1.0, 1.0); AssertHelpers.AlmostEqualRelative(new Complex(double.PositiveInfinity, double.PositiveInfinity), a.Power(b), 14); a = new Complex(0.0, 0.0); b = new Complex(0.0, 1.0); Assert.That(a.Power(b).IsNaN()); }
public override Fractal Render() { Complex c = new Complex(0, 0); //System.Numerics.Complex c = new System.Numerics.Complex(-0.39, -0.7); _ = Parallel.For(0, width, x => { for (int y = 0; y < height; y++) { int iterations = 0; double zx = Helper.Map(x, 0, width, domain[0][0][0], domain[width - 1][0][0]); double zy = Helper.Map(y, 0, height, domain[0][0][1], domain[0][height - 1][1]); //double lastDistance = 0; double totalDistance = 0; Complex z = new Complex(zx, zy); Complex last = new Complex(0, 0);//for shading do { last = z; z = z.Power(1.5); z = z.Subtract(0.2); totalDistance += z.Distance(last); } //while (z.Magnitude() <= 2 && iterations++ < highestExposureTarget); while (z.MagnitudeOpt() <= 4 && iterations++ < highestExposureTarget); //lastDistance = z.Distance(last); int index = x + y * width; exposure[index] = iterations; distance[index] = Math.Log(totalDistance); //distance[index] = (iterations > 51) ? totalDistance : 0; if (highestActual < exposure[index]) { //Console.WriteLine(zTemp.Distance(new Complex(0, 0))); highestActual = exposure[index]; } } }); return(this); }
public ComplexValue Power(ComplexValue exponent) { return(new ComplexValue(_dataValue.Power(exponent.Value))); }
public void TestPower() { // (1)^(1) = 1 Complex one = Complex.One; Complex onePowOne = one.Power(one); Assert.That(onePowOne.Real, Is.EqualTo(1d), "Re{(1)^(1)} = 1"); Assert.That(onePowOne.Imag, Is.EqualTo(0d), "Im{(1)^(1)} = 0"); // (i)^(1) = i Complex I = Complex.I; Complex IPowOne = I.Power(one); Assert.That(IPowOne.Real, NumericIs.AlmostEqualTo(0d), "Re{(i)^(1)} = 0"); Assert.That(IPowOne.Imag, Is.EqualTo(1d), "Im{(i)^(1)} = 1"); // (1)^(-1) = 1 Complex mOne = -Complex.One; Complex onePowMOne = one.Power(mOne); Assert.That(onePowMOne.Real, Is.EqualTo(1d), "Re{(1)^(-1)} = 1"); Assert.That(onePowMOne.Imag, Is.EqualTo(0d), "Im{(1)^(-1)} = 0"); // (i)^(-1) = -i Complex IPowMOne = I.Power(mOne); Assert.That(IPowMOne.Real, NumericIs.AlmostEqualTo(0d), "Re{(i)^(-1)} = 0"); Assert.That(IPowMOne.Imag, Is.EqualTo(-1d), "Im{(i)^(-1)} = -1"); // (i)^(-i) = exp(Pi/2) Complex mI = -Complex.I; Complex IPowMI = I.Power(mI); Assert.That(IPowMI.Real, Is.EqualTo(Math.Exp(Constants.Pi_2)), "Re{(i)^(-i)} = exp(Pi/2)"); Assert.That(IPowMI.Imag, Is.EqualTo(0d), "Im{(i)^(-i)} = 0"); // (0)^(0) = 1 Assert.That(Math.Pow(0d, 0d), Is.EqualTo(1d), "(0)^(0) = 1 (.Net Framework Sanity Check)"); Complex zero = Complex.Zero; Complex zeroPowZero = zero.Power(zero); Assert.That(zeroPowZero.Real, Is.EqualTo(1d), "Re{(0)^(0)} = 1"); Assert.That(zeroPowZero.Imag, Is.EqualTo(0d), "Im{(0)^(0)} = 0"); // (0)^(2) = 0 Assert.That(Math.Pow(0d, 2d), Is.EqualTo(0d), "(0)^(2) = 0 (.Net Framework Sanity Check)"); Complex two = new Complex(2d, 0d); Complex zeroPowTwo = zero.Power(two); Assert.That(zeroPowTwo.Real, Is.EqualTo(0d), "Re{(0)^(2)} = 0"); Assert.That(zeroPowTwo.Imag, Is.EqualTo(0d), "Im{(0)^(2)} = 0"); // (0)^(-2) = infty Assert.That(Math.Pow(0d, -2d), Is.EqualTo(double.PositiveInfinity), "(0)^(-2) = infty (.Net Framework Sanity Check)"); Complex mTwo = Complex.FromRealImaginary(-2d, 0d); Complex zeroPowMTwo = zero.Power(mTwo); Assert.That(zeroPowMTwo.Real, Is.EqualTo(double.PositiveInfinity), "Re{(0)^(-2)} = infty"); Assert.That(zeroPowMTwo.Imag, Is.EqualTo(0d), "Im{(0)^(-2)} = 0"); // (0)^(I) = NaN Complex zeroPowI = zero.Power(I); Assert.That(zeroPowI.Real, Is.NaN, "Re{(0)^(I)} = NaN"); Assert.That(zeroPowI.Imag, Is.NaN, "Im{(0)^(I)} = NaN"); // (0)^(-I) = NaN Complex zeroPowMI = zero.Power(mI); Assert.That(zeroPowMI.Real, Is.NaN, "Re{(0)^(-I)} = NaN"); Assert.That(zeroPowMI.Imag, Is.NaN, "Im{(0)^(-I)} = NaN"); // (0)^(1+I) = 0 Complex onePlusI = Complex.One + Complex.I; Complex zeroPowOnePlusI = zero.Power(onePlusI); Assert.That(zeroPowOnePlusI.Real, Is.EqualTo(0d), "Re{(0)^(1+I)} = 0"); Assert.That(zeroPowOnePlusI.Imag, Is.EqualTo(0d), "Im{(0)^(1+I)} = 0"); // (0)^(1-I) = 0 Complex oneMinusI = Complex.One - Complex.I; Complex zeroPowOneMinusI = zero.Power(oneMinusI); Assert.That(zeroPowOneMinusI.Real, Is.EqualTo(0d), "Re{(0)^(1-I)} = 0"); Assert.That(zeroPowOneMinusI.Imag, Is.EqualTo(0d), "Im{(0)^(1-I)} = 0"); // (0)^(-1+I) = infty + infty * i Complex minusOnePlusI = new Complex(-1d, 1d); Complex zeroPowMinusOnePlusI = zero.Power(minusOnePlusI); Assert.That(zeroPowMinusOnePlusI.Real, Is.EqualTo(double.PositiveInfinity), "Re{(0)^(-1+I)} = infty"); Assert.That(zeroPowMinusOnePlusI.Imag, Is.EqualTo(double.PositiveInfinity), "Im{(0)^(-1+I)} = infty"); }