nfTlWNl rnK#>=MJ6<0?̢2k~MoRv&N,:f&N%M(z Ti$9rS۱qMf2>lKӀ~EdF=/7?TC"_y/m50_\L*G?'NAt};WyȵnG +jSF3K,.c( A$Ƥ12Z,L$OE޽5=;ՂiXz" /;tV<99Xýu>%q"I6QunwI5A-PscL 4şN4X>8S)|gpf!57:Ma!r&4׿PCy~H'̊^' z 3I >"I{Кie;#KZsE}Q~i4JzC ĢQ$36k2B{م*%6R 캋Fls,QŐZz"b@䈎xZh|`q)MqυR,R? ?uEDp{q]yNzcTN!yKH[4 W^~0sEفw*'{Z9;TYoD-&3mMvDNy2 "hnd9ơE.##Ƴd.{ЕDL8j)ws txҨCrۿBbBeѫmvPGIT>0$y"ok9~6QypBA1uSv',;]Z.]9crC!/JGCŇiΗ`fC(UnϮC^PG߰z$|+ k܏_ArܤQcVLbP PٮB䛖5f:]%[Jbp%e]kˢt'p/xz M/'Eo_G1RL@=/翥.?6I7|>B0(l2ù(9C #SISY>:L Aöt-`#R_жeD׮("\w-pKpfrHy{ѐ$ajNe]TaaAD8vy䩭3dH-㾸^Ǎ cc:iomWqH%2օ̱@(j' pQ-y5|J,Z :O9ZI[$,DC/)X2u`jEݲ%A602p\i"]2Gi{V-;[Y!RKwI];qc9v{mM6o^ҧDݷ,a+:[+ѯ.(0`ny4&g^GKߦCRbcR) ?!oiL'Iy!cF/Ֆ1=0Z’;1#$0干/WC" Ӈ H*?TW@bo Ħt;b{NVM.3.e^5wn2?1v0 z eYeT 24!"ihZ-a ;~~raM%P(2S!)dMiD#/w ʯѼyD 9p ᖀev"Q;Fx g nQfuc'G: Ia0H^LϽy :[xc"9/8ɖWL}iz'4|`./c|(iك#Xn<_*A\i!^CU=?EIa ۆ+zT0t (3ZIpl-!O>@XȪO60n°dnu2-ՇLwS8s`a5k eW"[&#}Sߗ?^5Su` ; 'fsk_E`ޚeҖJi4LqIAq-K`~t;"!5Ԅ{|o I7wj;6Ŗ~%nS?_A$PDaٳeΏVSZ0HR+9b-`Tľ_/a|EndM>Jm+m DR y+ô+ΚABJ=cGQ 9Mq|krQźпf!Ѧ=gy<"nim6=Ltkܴ|c +WTz2S=QPl qeJ䳁dAϖNӾGh٩haq=fe.pO )_A[:qt*f+$>u7P\-UB:j‘km%S`(諀xr=C$!seϻ|QIepq3OƟ(5XYeB*j77QInOz\Zw}r!VUn P |)RD 3{ getImaginary() * $result->getReal()) - ($complex->getReal() * $result->getImaginary()); $delta3 = ($result->getReal() * $result->getReal()) + ($result->getImaginary() * $result->getImaginary()); $real = $delta1 / $delta3; $imaginary = $delta2 / $delta3; $result = new Complex( $real, $imaginary, ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) ); } return $result; } /** * Multiplies two or more complex numbers * * @param array of string|integer|float|Complex $complexValues The numbers to multiply * @return Complex */ public static function multiply(...$complexValues): Complex { if (count($complexValues) < 2) { throw new \Exception('This function requires at least 2 arguments'); } $base = array_shift($complexValues); $result = clone Complex::validateComplexArgument($base); foreach ($complexValues as $complex) { $complex = Complex::validateComplexArgument($complex); if ($result->isComplex() && $complex->isComplex() && $result->getSuffix() !== $complex->getSuffix()) { throw new Exception('Suffix Mismatch'); } $real = ($result->getReal() * $complex->getReal()) - ($result->getImaginary() * $complex->getImaginary()); $imaginary = ($result->getReal() * $complex->getImaginary()) + ($result->getImaginary() * $complex->getReal()); $result = new Complex( $real, $imaginary, ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) ); } return $result; } /** * Subtracts two or more complex numbers * * @param array of string|integer|float|Complex $complexValues The numbers to subtract * @return Complex */ public static function subtract(...$complexValues): Complex { if (count($complexValues) < 2) { throw new \Exception('This function requires at least 2 arguments'); } $base = array_shift($complexValues); $result = clone Complex::validateComplexArgument($base); foreach ($complexValues as $complex) { $complex = Complex::validateComplexArgument($complex); if ($result->isComplex() && $complex->isComplex() && $result->getSuffix() !== $complex->getSuffix()) { throw new Exception('Suffix Mismatch'); } $real = $result->getReal() - $complex->getReal(); $imaginary = $result->getImaginary() - $complex->getImaginary(); $result = new Complex( $real, $imaginary, ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) ); } return $result; } }