This commit is contained in:
Dennis Eichhorn 2018-04-13 21:04:48 +02:00
parent 5ab51d66b7
commit 184e407201
2 changed files with 28 additions and 1 deletions

View File

@ -148,7 +148,9 @@ class Complex
public function pow($value) : Complex
{
if (is_numeric($value)) {
if (is_int($value)) {
return $this->powInteger($value);
} elseif (is_numeric($value)) {
return $this->powScalar($value);
} elseif ($value instanceof Complex) {
return $this->powComplex($value);
@ -162,6 +164,28 @@ class Complex
}
/**
* Power with integer
*
* @param int $value Power
*
* @return Complex
*
* @since 1.0.0
*/
public function powInteger(int $value) : Complex
{
if ($value === 0) {
return new self(1, 0);
} elseif ($value === 1) {
return $this;
}
for ($i = $value; $i > 0; --$i) {
return $this->multComplex($this->powInteger($i));
}
}
public function powScalar() : Complex
{

View File

@ -58,6 +58,9 @@ class ComplexTest extends \PHPUnit\Framework\TestCase
self::assertEquals('0.16 - 0.12i', $cpl->reciprocal()->render(2));
self::assertEquals('7.00 + 24.00i', $cpl->square()->render());
self::assertEquals('7.00 + 24.00i', $cpl->pow(2)->render());
self::assertEquals('-44.00 - 117.00i', $cpl->pow(3)->render());
self::assertEquals(5, $cpl->abs(), '', 0.01);
self::assertEquals('2.12 + 0.71i', $cpl->sqrt()->render());