subtract.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. /**
  3. *
  4. * Function code for the complex subtraction operation
  5. *
  6. * @copyright Copyright (c) 2013-2018 Mark Baker (https://github.com/MarkBaker/PHPComplex)
  7. * @license https://opensource.org/licenses/MIT MIT
  8. */
  9. namespace Complex;
  10. /**
  11. * Subtracts two or more complex numbers
  12. *
  13. * @param array of string|integer|float|Complex $complexValues The numbers to subtract
  14. * @return Complex
  15. */
  16. if (!function_exists(__NAMESPACE__ . '\\subtract')) {
  17. function subtract(...$complexValues): Complex
  18. {
  19. if (count($complexValues) < 2) {
  20. throw new \Exception('This function requires at least 2 arguments');
  21. }
  22. $base = array_shift($complexValues);
  23. $result = clone Complex::validateComplexArgument($base);
  24. foreach ($complexValues as $complex) {
  25. $complex = Complex::validateComplexArgument($complex);
  26. if ($result->isComplex() && $complex->isComplex() &&
  27. $result->getSuffix() !== $complex->getSuffix()) {
  28. throw new Exception('Suffix Mismatch');
  29. }
  30. $real = $result->getReal() - $complex->getReal();
  31. $imaginary = $result->getImaginary() - $complex->getImaginary();
  32. $result = new Complex(
  33. $real,
  34. $imaginary,
  35. ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix())
  36. );
  37. }
  38. return $result;
  39. }
  40. }