package Ġcn . an con o . math . number Models . structure Ċ Ċ import Ġcn . an con o . math . Abstract Math Object Ċ import Ġcn . an con o . math . IM ath Object Ċ import Ġcn . an con o . math . algebra . abs . calculator . Equal Predicate Ċ import Ġcn . an con o . math . algebra . abs . calculator . Field Calculator Ċ Ċ import Ġcn . an con o . math . function . Bi jection Ċ import Ġcn . an con o . math . geometry . an alytic . plane . P Vector Ċ import Ġcn . an con o . math . geometry . an alytic . plane . Point Ċ import Ġcn . an con o . math . geometry . an alytic . space . S Point Ċ import Ġcn . an con o . math . number Models . Fraction Ċ import Ġcn . an con o . math . number Models . Math Calculator Adapter Ċ import Ġcn . an con o . math . number Models . api .* Ċ import Ġorg . jetbrains . annotations . NotNull Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Function Ċ import Ġkotlin . math . atan 2 Ċ Ċ /* Ċ Created Ġby Ġli y ich eng Ġ 2 0 2 0 / 2 / 2 4 Ċ */ Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġthe Ġexpanded Ġcomplex Ġincluding Ġthe Ġinfinity Ġpoint . Ċ Ġ*/ Ċ sealed Ġclass ĠComplex E < T > Ġconstructor ( mc : ĠField Calculator < T >) Ġ: ĠAbstract Math Object < T , ĠField Calculator < T >>( mc ) Ġ{ ĊĊĠĠĠ Ġabstract Ġfun Ġis Inf (): ĠBoolean ĊĊĠĠĠ Ġabstract Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠComplex E < N > Ċ } Ċ Ċ class ĠComplex Inf < T > Ġinternal Ġconstructor ( mc : ĠField Calculator < T >) Ġ: ĠComplex E < T >( mc ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġis Inf (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠComplex Inf < N > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Inf ( new Calculator Ġas ĠField Calculator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue Equals ( obj : ĠI Math Object < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobj Ġis ĠComplex Inf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString ( nf : ĠNumber Formatter < T >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Inf " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠComplex Inf < *> ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠComplex Ġnumber , Ġa Ġtype Ġof Ġnumber Ġthat Ġcan Ġbe Ġwritten Ġas Ġ` A + Bi `, Ġwhere ĠA , B Ġare Ċ Ġ* Ġboth Ġreal Ġnumber , Ġand Ġ" i " Ġis Ġthe Ġsquare Ġroot Ġof Ġ`- 1 `. Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIn Ġthis Ġtype Ġof Ġnumber , Ġall Ġcalculation Ġwill Ġconsider Ġthat Ġboth ĠA Ġand ĠB Ġare Ġreal Ġnumber , Ċ Ġ* Ġand Ġfollow ings Ġare Ġthe Ġbasic Ġrules . Ċ Ġ* Ġ Ġ* ĠAdd :< pre > Ġ( A + Bi )+( C + Di ) Ġ= Ġ( A + B )+( C + Di )</ pre > Ċ Ġ* Ġ Ġ* ĠNeg ate :< pre > Ġ-( A + Bi ) Ġ= Ġ- A Ġ+ Ġ(- B ) i </ pre > Ċ Ġ* Ġ Ġ* ĠSubtract :< pre > Z 1 Ġ- ĠZ 2 Ġ= ĠZ 1 Ġ+ Ġ(- Z 2 )</ pre > Ċ Ġ* Ġ Ġ* ĠMultiple :< pre >( A + Bi )*( C + Di ) =( AC - BD )+( AD + BC ) i </ pre > Ċ Ġ* Ġ Ġ* ĠDiv ide :< pre >( A + Bi )/( C + Di )= 1 /( C ^ 2 + D ^ 2 )* (( AC + BD )+( BC - AD ) i )</ pre > Ċ Ġ* ĠOperations Ġsuch Ġas Ġmod ulus Ġand Ġconj ug ate Ġare Ġalso Ġprovided . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe Ġcomplex Ġitself Ġrequires Ġa Ġtype Ġof Ġnumber Ġto Ġimplement ĠA Ġand ĠB , such Ġas Ċ Ġ* Ġ` Complex < Double >` Ġand Ġ` Complex < Long >`, and Ġcomplex Ġis Ġa Ġkind Ġof Ġnumber Ġtoo . Ċ Ġ* ĠThis Ġmay Ġcause Ġsome Ġwaste , Ġto Ġuse Ġcomplex Ġnumber Ġonly Ġas Ġa Ġkind Ġof Ġnumber Ġtype , Ġyou Ġmay Ġuse Ġ[ cn . an con o . math . number Models . Complex D ] Ċ Ġ* Ċ Ġ* Ġ@ author Ġl yc Ċ Ġ* Ċ Ġ*/ Ċ class ĠComplex < T > Ġinternal Ġconstructor ( mc : ĠField Calculator < T >, Ġa : ĠT , Ġb : ĠT ) Ġ: ĠComplex E < T >( mc ), ĊĠĠĠĠĠĠĠ ĠField Number Model < Complex < T >> Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġa : ĠT Ġ= ĠObjects . requireNonNull ( a ) ĊĠĠĠ Ġprivate Ġval Ġb : ĠT Ġ= ĠObjects . requireNonNull ( b ) ĊĠĠĠ Ġprivate Ġvar Ġm : ĠT ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġarg : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġis Inf (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Zero (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn Ġmc . is Zero ( a ) Ġ&& Ġmc . is Zero ( b ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Real (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculator . is Zero ( b ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġreal Ġpart Ġof Ġthis , which Ġis ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ` Re ( this )`. ĊĠĠĠĠ Ġ* Ġ@ return Ġ` Re ( this )` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġre (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġa ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġimag inary Ġpart Ġof Ġthis , which Ġis ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ` Im ( this )`. ĊĠĠĠĠ Ġ* Ġ@ return Ġ` Im ( this )` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġim (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmod ulus Ġof Ġthis Ġcomplex Ġnumber , which Ġis ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ` | this | `. ĊĠĠĠĠ Ġ* Ġ@ return Ġ` | this |` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmod ulus (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġmc . square Root ( mc . add ( mc . multiply ( a , Ġa ), Ġmc . multiply ( b , Ġb ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsquare Ġof Ġthe Ġmod ulus . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmod ulus Sq (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn Ġmc . add ( mc . multiply ( a , Ġa ), Ġmc . multiply ( b , Ġb )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvector Ġof Ġthis (` < a , b >` ). ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Vector (): ĠP Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP Vector . valueOf ( a , Ġb , Ġcalculator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġpoint Ġrepresentation Ġin Ġcomplex Ġplane Ġof Ġthis Ġnumber . ĊĠĠĠĠ Ġ* Ġ@ return Ġpoint ( a , b ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Point (): ĠPoint < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPoint . valueOf ( a , Ġb , Ġcalculator Ġas ĠReal Calculator < T >) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtrig on ome tr ical Ġform Ġof Ġthis Ġcomplex Ġnumber . ĊĠĠĠĠ Ġ* ĠThe Ġfirst Ġelement Ġis Ġthe Ġargument Ġand Ġthe Ġsecond Ġelement Ġis Ġthe Ġmod ulus ĊĠĠĠĠ Ġ* Ġof Ġthis Ġcomplex Ġnumber . ĊĠĠĠĠ Ġ* Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtri Form (): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < T >( 2 ) ĊĠĠĠĠĠĠĠ Ġlist . add ( arg ()) ĊĠĠĠĠĠĠĠ Ġlist . add ( modulus ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġargument Ġof Ġthis Ġcomplex Ġnumber , which Ġis ĊĠĠĠĠ Ġ* Ġequal Ġto Ġarg ( this ). The Ġrange Ġof Ġthe Ġangle Ġwill Ġbe Ġin Ġ[ 0 , 2 Pi ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNotice Ġ: Ġarg ( 0 ) Ġ= Ġ 0 . ĊĠĠĠĠ Ġ* Ġ@ return Ġarg ( this ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġarg (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( arg Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpi Ġ= Ġmc . constant Value ( Real Calculator . STR _ PI ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp a Ġ= Ġmc . compare ( a , Ġmc . zero ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp b Ġ= Ġmc . compare ( b , Ġmc . zero ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp a Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp b Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( comp b Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . divide Long ( pi , Ġ 2 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . add ( mc . divide Long ( pi , Ġ 2 L ), Ġpi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp b Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( comp a Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtheta Ġ= Ġmc . ar ct an ( mc . abs ( mc . divide ( b , Ġa ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp a Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp b Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheta Ġ= Ġmc . subtract ( mc . multiply Long ( pi , Ġ 2 L ), Ġtheta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheta Ġ= Ġif Ġ( comp b Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . subtract ( pi , Ġtheta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . add ( theta , Ġpi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Ġ= Ġtheta ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġarg !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` this + y `. ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĊĠĠĠĠ Ġ* Ġ@ return Ġ` this + y ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd ( y : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . add ( a , Ġy . a ), Ġmc . add ( b , Ġy . b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ` this - y `. ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĊĠĠĠĠ Ġ* Ġ@ return Ġ` this - y ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsubtract ( y : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . subtract ( a , Ġy . a ), Ġmc . subtract ( b , Ġy . b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ`- this `. ĊĠĠĠĠ Ġ* Ġ@ return Ġ`- this ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġneg ate (): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . neg ate ( a ), Ġmc . neg ate ( b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġconj ug ate Ġcomplex Ġnumber Ġof Ġ` this `. ĊĠĠĠĠ Ġ* Ġ@ return Ġconj ug ate Ġof Ġthis ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconj (): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġa , Ġmc . neg ate ( b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthis * y . ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ` this * y `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmultiply ( y : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ( a + bi )*( c + di ) Ġ= ĊĠĠĠĠĠĠĠ Ġ// Ġac - bd Ġ+ Ġ( ad + bc ) i ĊĠĠĠĠĠĠĠ Ġ// but Ġwe Ġcan Ġuse Ġa Ġtrick Ġto Ġreduce Ġcalculation : ĊĠĠĠĠĠĠĠ Ġ// 1 .( a + b )( c + d ) Ġ= Ġac Ġ+ Ġbd Ġ+ Ġad Ġ+ Ġbc ĊĠĠĠĠĠĠĠ Ġ// 2 . ac Ġ, Ġ 3 . Ġbd ĊĠĠĠĠĠĠĠ Ġ// and Ġ 1 Ġ- Ġ 2 Ġ- Ġ 3 Ġ= Ġad Ġ+ Ġbc ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ 2 Ġ- Ġ 3 Ġ= Ġac Ġ- Ġbd ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġval Ġt 1 Ġ= Ġmc . multiply ( mc . add ( a , Ġb ), Ġmc . add ( y . a , Ġy . b )) ĊĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= Ġmc . multiply ( a , Ġy . a ) ĊĠĠĠĠĠĠĠ Ġval Ġt 3 Ġ= Ġmc . multiply ( b , Ġy . b ) ĊĠĠĠĠĠĠĠ Ġval Ġan Ġ= Ġmc . subtract ( t 2 , Ġt 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġbn Ġ= Ġmc . subtract ( t 1 , Ġmc . add ( t 2 , Ġt 3 )) ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġan , Ġbn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthis * r . ĊĠĠĠĠ Ġ* Ġ@ param Ġr ĊĠĠĠĠ Ġ* Ġ@ return Ġthis * r ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmultiply Real ( r : ĠT ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . multiply ( a , Ġr ), Ġmc . multiply ( b , Ġr )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthis / z , throw ĠArithmetic Exception Ġif Ġz Ġ= Ġ 0 . ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġ` this * z `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdivide ( y : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ĊĠĠĠĠĠĠĠ Ġ// z 1 Ġ/ Ġz 2 Ġ= Ġ( z 1 Ġ* Ġz 2 ) Ġ/ Ġ| z 2 | ^ 2 ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġval Ġsq Ġ= Ġmc . add ( mc . multiply ( y . a , Ġy . a ), Ġmc . multiply ( y . b , Ġy . b )) ĊĠĠĠĠĠĠĠ Ġ// copy Ġcode Ġhere ĊĠĠĠĠĠĠĠ Ġval Ġtb Ġ= Ġmc . neg ate ( y . b ) ĊĠĠĠĠĠĠĠ Ġval Ġt 1 Ġ= Ġmc . multiply ( mc . add ( a , Ġb ), Ġmc . add ( y . a , Ġtb )) ĊĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= Ġmc . multiply ( a , Ġy . a ) ĊĠĠĠĠĠĠĠ Ġval Ġt 3 Ġ= Ġmc . multiply ( b , Ġtb ) ĊĠĠĠĠĠĠĠ Ġvar Ġan Ġ= Ġmc . subtract ( t 2 , Ġt 3 ) ĊĠĠĠĠĠĠĠ Ġvar Ġbn Ġ= Ġmc . subtract ( t 1 , Ġmc . add ( t 2 , Ġt 3 )) ĊĠĠĠĠĠĠĠ Ġan Ġ= Ġmc . divide ( an , Ġsq ) ĊĠĠĠĠĠĠĠ Ġbn Ġ= Ġmc . divide ( bn , Ġsq ) ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġan , Ġbn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre ci pro cal (): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ_ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 Ġ/ Ġz Ġ= Ġz Ġ/ Ġ| z | ^ 2 ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġval Ġsq Ġ= Ġmc . add ( mc . multiply ( a , Ġa ), Ġmc . multiply ( b , Ġb )) ĊĠĠĠĠĠĠĠ Ġval Ġan Ġ= Ġmc . divide ( a , Ġsq ) ĊĠĠĠĠĠĠĠ Ġval Ġbn Ġ= Ġmc . divide ( mc . neg ate ( b ), Ġsq ) ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġan , Ġbn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġresult Ġof Ġ` this ^ p `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġn Ġthe Ġpower ĊĠĠĠĠ Ġ* Ġ@ return Ġ` this ^ p ` ĊĠĠĠĠ Ġ* Ġ@ throws ĠArithmetic Exception Ġif Ġ` p == 0 Ġ&& Ġthis == 0 ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġpow ( n : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġp 1 Ġ= Ġn ĊĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġre ci pro cal (). pow (- n ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġ// we Ġuse Ġthis Ġway Ġto Ġreduce Ġthe Ġcalculation Ġto Ġlog ( p ) ĊĠĠĠĠĠĠĠ Ġvar Ġre Ġ= Ġreal ( mc . one , Ġmc ) ĊĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mc . is Zero ( a ) Ġ&& Ġmc . is Zero ( b )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" 0 ^ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġre ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġth Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġwhile Ġ( p 1 Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// which Ġmeans Ġneed Ġto Ġmultiple Ġthis Ġone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġand Ġ 1 L Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre Ġ= Ġre . multiply ( th ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth Ġ= Ġth . multiply ( th ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 Ġ= Ġp 1 Ġshr Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġre ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsquare Root (): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠ Ġfun Ġnon Negative ( t : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . compare ( t , Ġmc . zero ) Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ( mc . is Zero ( x . im ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre Ġ= Ġx . re () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( non Negative ( re )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComplex ( mc , Ġmc . square Root ( re ), Ġmc . zero ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComplex ( mc , Ġmc . zero , Ġmc . neg ate ( re )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġx . modulus () ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġmc . square Root ( m ) ĊĠĠĠĠĠĠĠ Ġvar Ġcos Ġ= Ġmc . divide ( x . a , Ġm ) ĊĠĠĠĠĠĠĠ Ġvar Ġsin Ġ= Ġmc . divide ( x . b , Ġr ) ĊĠĠĠĠĠĠĠ Ġcos Ġ= Ġmc . square Root ( mc . divide Long ( mc . add ( cos , Ġmc . one ), Ġ 2 L )) ĊĠĠĠĠĠĠĠ Ġsin Ġ= Ġmc . square Root ( mc . divide Long ( mc . subtract ( mc . one , Ġsin ), Ġ 2 L )) ĊĠĠĠĠĠĠĠ Ġif Ġ(! non Negative ( x . b )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcos Ġ= Ġmc . neg ate ( cos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcos Ġ= Ġmc . multiply ( r , Ġcos ) ĊĠĠĠĠĠĠĠ Ġsin Ġ= Ġmc . multiply ( r , Ġsin ) ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġcos , Ġsin ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġcomplex Ġ` x ` Ġthat Ġ` x ^ n Ġ= Ġthis `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġn root ( n : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠ Ġif Ġ( is Real ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreal ( mc . n root ( a , Ġn ), Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġvar Ġarg Ġ= Ġx . arg () ĊĠĠĠĠĠĠĠ Ġarg Ġ= Ġmc . divide Long ( arg , Ġn ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmod Arg ( mc . n root ( x . modulus (), Ġn ), Ġarg , Ġmc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĉ public ĠComplex < T > Ġpow f () ĊĊĠĠĠ Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠComplex < N > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex ( new Calculator Ġas ĠField Calculator < N >, Ġmapper . apply ( a ), Ġmapper . apply ( b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġis ĠComplex <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa Ġ== Ġother . a Ġ&& Ġb Ġ== Ġother . b ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġa . hashCode () Ġ+ Ġ 3 7 Ġ* Ġb . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġform Ġof Ġ( a )+( b ) i ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString ( nf : ĠNumber Formatter < T >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġif Ġ( mc . is Zero ( a )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . is Zero ( b ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . isEqual ( b , Ġmc . one ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpossible Ġfeature Ġfor Ġbetter Ġformatting Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġnf . format ( b , mc ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . length Ġ== Ġ 1 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" ($ s )" Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"(" Ġ+ Ġnf . format ( b ) Ġ+ Ġ") i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mc . is Zero ( b )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnf . format ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' (' ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( nf . format ( a )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ('+ ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mc . isEqual ( b , Ġmc . one )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' i ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' (' ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( nf . format ( b )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" ) i ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue Equals ( obj : ĠI Math Object < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( obj Ġis ĠComplex <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcom Ġ= Ġobj Ġas ĠComplex < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . isEqual ( a , Ġcom . a ) Ġ&& Ġmc . isEqual ( b , Ġcom . b ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġoverride Ġfun Ġ< N > Ġvalue Equals ( obj : ĠMath Object < N >, Ġmapper : ĠFunction < N , ĠT >): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( obj Ġis ĠComplex <* >) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcom Ġ= Ġobj Ġas ĠComplex < N > Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . isEqual ( a , Ġmapper . apply ( com . a )) Ġ&& Ġmc . isEqual ( b , Ġmapper . apply ( com . b )) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠComplex Calculator < T >( val Ġmc : ĠField Calculator < T >) Ġ: ĠMath Calculator Adapter < Complex < T >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġzero : ĠComplex < T > Ġ= Ġzero ( mc ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġone : ĠComplex < T > Ġ= Ġreal ( mc . one , Ġmc ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġimag inary Ġunit Ġ` i Ġ= ĠS qr (- 1 )`. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġi : ĠComplex < T > Ġ= Ġimag inary ( mc . one , Ġmc ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġof ( n : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreal ( mc . of ( n )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġof ( x : ĠFraction ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreal ( mc . of ( x )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ( non - Javadoc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ see Ġcn . an con o . cn . an con o . utilities . math . Math Calculator # getNumber Class () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnumber Class : ĠClass < Complex < T >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠComplex :: class . java Ġas ĠClass < Complex < T >> ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Equal ( x : ĠComplex < T >, Ġy : ĠComplex < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . value Equals ( y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare ( x : ĠComplex < T >, Ġy : ĠComplex < T >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Complex Ġis Ġnot Ġcomp arable .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( x : ĠComplex < T >, Ġy : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . add ( y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġneg ate ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . neg ate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġmethod Ġoverrides Ġthe Ġnormal Ġ` abs ()` Ġmethod Ġand Ġit ĊĠĠĠĠĠĠĠĠ Ġ* Ġis Ġequal Ġto Ġmod ulus Ġof Ġthe Ġcomplex .( | z |) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġabs ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreal ( x . modulus ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubtract ( x : ĠComplex < T >, Ġy : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . subtract ( y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmultiply ( x : ĠComplex < T >, Ġy : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . multiply ( y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdivide ( x : ĠComplex < T >, Ġy : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . divide ( y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġre ci pro cal ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . reci pro cal () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmultiply Long ( x : ĠComplex < T >, Ġn : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . multiply Long ( x . a , Ġn ), Ġmc . multiply Long ( x . b , Ġn )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdivide Long ( x : ĠComplex < T >, Ġn : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . divide Long ( x . a , Ġn ), Ġmc . divide Long ( x . b , Ġn )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsquare Root ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . square Root () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ see ĠReal Calculator . n root ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġn root ( x : ĠComplex < T >, Ġn : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . n root ( n ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpow ( x : ĠComplex < T >, Ġn : ĠLong ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . pow ( n ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstant Value ( name : ĠString ): ĠComplex < T >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTR _ I Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . zero , Ġmc . one ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( mc Ġas ĠReal Calculator ). constant Value ( name ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġx , Ġmc . zero ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġexp ( x ). ĠAss uming Ġthat Ġx Ġ= Ġa + bi , Ġthe Ġfunction Ġreturns Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġcomplex Ġnumber Ġwhose Ġmod ulus Ġis Ġequal Ġto Ġe ^ a Ġand ĊĠĠĠĠĠĠĠĠ Ġ* Ġargument Ġis Ġequal Ġto Ġb . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexp ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmod Arg (( mc Ġas ĠReal Calculator ). exp ( x . a ), Ġx . b , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġexp ( a , b ), Ġwhich Ġis Ġequal Ġto Ġexp ( ln ( a )* b ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexp ( a : ĠComplex < T >, Ġb : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexp ( multiply ( ln ( a ), Ġb )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġprimary Ġvalue Ġof Ġln ( x ), Ġwhich Ġis Ġequal Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠĠĠĠĠ Ġ* Ġln (| z |) Ġ+ Ġarg ( z ) i ĊĠĠĠĠĠĠĠ Ġ</ pre > Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġln ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmod Ġ= Ġx . modulus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mc . is Zero ( mod )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" ln ( 0 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġx . arg () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmod , Ġarg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġreal Ġnumber Ġ` a ` Ġas Ġa Ġcomplex Ġnumber . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġreal ( a : ĠT ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġa , Ġmc . zero ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġcomplex Ġnumber Ġ` a + bi `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġvalue Of ( a : ĠT , Ġb : ĠT ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġa , Ġb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġimag inary Ġnumber Ġ` bi ` Ġas Ġa Ġcomplex Ġnumber . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġimag inary ( b : ĠT ): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . zero , Ġb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcos ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( exp ( i Ġ* Ġx ) Ġ+ Ġexp (- i Ġ* Ġx )) Ġ/ Ġ 2 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsin ( x : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( exp (- i Ġ* Ġx ) Ġ- Ġexp ( i Ġ* Ġx )) Ġ* Ġi Ġ/ Ġ( 2 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThe ĠString Ġrepresentation Ġof Ġ* i *, Ġthe Ġsquare Ġroot Ġof Ġ- 1 . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTR _ I Ġ= Ġ" i " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠComplex E Calculator < T >( val Ġmc : ĠComplex Calculator < T >) Ġ: ĠMath Calculator Adapter < Complex E < T >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġone : ĠComplex E < T > Ġ= Ġmc . one ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġzero : ĠComplex E < T > Ġ= Ġmc . zero ĊĠĠĠĠĠĠĠ Ġval Ġi : ĠComplex E < T > Ġ= Ġmc . i ĊĠĠĠĠĠĠĠ Ġval Ġinf : ĠComplex E < T > Ġ= Ġinf ( mc . mc ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġof ( n : ĠLong ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . of ( n ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġof ( x : ĠFraction ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . of ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Zero ( x : ĠComplex E < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx Ġis ĠComplex Ġ&& Ġmc . is Zero ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Equal ( x : ĠComplex E < T >, Ġy : ĠComplex E < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġis ĠComplex Ġ&& Ġy Ġis ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . isEqual ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx . is Inf () Ġ&& Ġy . is Inf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( x : ĠComplex E < T >, Ġy : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex Ġ|| Ġy Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . add ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġneg ate ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . neg ate ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġabs ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . abs ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubtract ( x : ĠComplex E < T >, Ġy : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex Ġ|| Ġy Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . subtract ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmultiply ( x : ĠComplex E < T >, Ġy : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Zero ( y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" Inf Ġ* Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Zero ( x )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" 0 Ġ* ĠInf ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . multiply ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdivide ( x : ĠComplex E < T >, Ġy : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" Inf Ġ/ ĠInf ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . divide ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmultiply Long ( x : ĠComplex E < T >, Ġn : ĠLong ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" Inf Ġ* Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . multiply Long ( x , Ġn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdivide Long ( x : ĠComplex E < T >, Ġn : ĠLong ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . divide Long ( x , Ġn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġre ci pro cal ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc . reci pro cal ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsquare Root ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . square Root ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpow ( x : ĠComplex E < T >, Ġn : ĠLong ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ> Ġ 0 Ġ-> Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ== Ġ 0 L Ġ-> Ġthrow ĠArithmetic Exception (" Inf ^ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . pow ( x , Ġn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexp ( a : ĠComplex E < T >, Ġb : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexp ( multiply ( b , Ġln ( a ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcos ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" cos ( Inf )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . cos ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsin ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" sin ( Inf )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . sin ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtan ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" tan ( Inf )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . tan ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġn root ( x : ĠComplex E < T >, Ġn : ĠLong ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . n root ( x , Ġn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexp ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . exp ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġln ( x : ĠComplex E < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmc . ln ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġcross Ratio ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 : ĠComplex E < T >, Ġx 2 : ĠComplex E < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 3 : ĠComplex E < T >, Ġx 4 : ĠComplex E < T > ĊĠĠĠĠĠĠĠ Ġ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcross Ratio ( x 1 , Ġx 2 , Ġx 3 , Ġx 4 , Ġmc . mc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnumber Class : ĠClass < Complex E < T >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠComplex E :: class . java Ġas ĠClass < Complex E < T >> ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// some Ġargument Ġfunction Ġimplements Ġhere : ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġdefault Ġimplement Ġof Ġargument Ġfunction Ġfor ĠDouble . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠD AF : Ġ( Complex < Double >) Ġ-> ĠDouble Ġ= Ġ{ Ġt : ĠComplex < Double > Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġarg Ġ= Ġatan 2 ( t . b , Ġt . a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// must Ġbe Ġin Ġ[ 0 , 2 pi ), so Ġadd Ġ 2 Pi Ġif Ġnecessary . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg Ġ+= ĠMath . PI Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġthe Ġvalue Ġof Ġ 0 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmc ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġzero ( mc : ĠField Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġmc . zero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġz , Ġz ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġcomplex Ġinstance Ġof ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > a Ġ+ Ġbi </ pre > ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġa Ġreal Ġpart Ġof Ġthe Ġcomplex ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġb Ġimag inary Ġpart Ġof Ġthe Ġcomplex ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmc Ġa Ġ[ Real Calculator ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġa Ġnew Ġcomplex . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( a : ĠT , Ġb : ĠT , Ġmc : ĠField Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġa , Ġb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġthe Ġvalue Ġof Ġ` 1 `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġone ( mc : ĠField Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . one , Ġmc . zero ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġthe Ġvalue Ġof Ġ` i `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġi ( mc : ĠField Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . zero , Ġmc . one ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreate Ġa Ġimag inary Ġnumber ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > a </ pre > ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġimag inary Ġpart Ġof Ġthis Ġnumber Ġwill Ġbe Ġ 0 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġa Ġthe Ġreal Ġpart ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmc Ġa Ġ[ Real Calculator ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġa Ġnew Ġcomplex . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġreal ( a : ĠT , Ġmc : ĠField Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġa , Ġmc . zero ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġinf ( mc : ĠField Calculator < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex Inf ( mc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreate Ġa Ġreal Ġnumber ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > bi </ pre > ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġreal Ġpart Ġof Ġthis Ġnumber Ġwill Ġbe Ġ 0 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġb Ġthe Ġimag inary Ġpart ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmc Ġa Ġ[ Real Calculator ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġa Ġnew Ġcomplex . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġimag inary ( b : ĠT , Ġmc : ĠField Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . zero , Ġb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġcomplex Ġthat Ġis Ġequal Ġto : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > r *( cos ( theta )+ isin ( theta )) </ pre > ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġr ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtheta ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġmod Arg ( r : ĠT , Ġtheta : ĠT , Ġmc : ĠReal Calculator < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex ( mc , Ġmc . multiply ( r , Ġmc . cos ( theta )), Ġmc . multiply ( r , Ġmc . sin ( theta ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġa Ġcalculator Ġfor Ġcomplex Ġusing Ġthe Ġgiven ĠMath Calculator . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcalculator ( mc : ĠField Calculator < T >): ĠComplex Calculator < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex Calculator ( mc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġa Ġcalculator Ġfor Ġthe Ġextended Ġcomplex . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcalculator E ( mc : ĠReal Calculator < T >): ĠComplex E Calculator < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex E Calculator ( calculator ( mc )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġcross Ġratio Ġof Ġthe Ġfour Ġcomplex . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠ Ġcross Ratio ( x 1 , x 2 , x 3 , x 4 ) Ġ= Ġ( x 1 - x 3 )( x 2 - x 4 )/( x 1 - x 4 )( x 2 - x 3 ) ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠSome Ġproperties : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 1 . Ġcross Ratio ( x 1 , x 2 , x 3 , x 4 ) Ġis Ġreal Ġiff Ġx 1 , x 2 , x 3 , x 4 Ġis Ġon Ġa Ġcircle Ġ( including Ġline ) ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcross Ratio ( x 1 : ĠComplex < T >, Ġx 2 : ĠComplex < T >, Ġx 3 : ĠComplex < T >, Ġx 4 : ĠComplex < T >): ĠComplex < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ( x 1 - x 3 )( x 2 - x 4 )/( x 1 - x 4 )( x 2 - x 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( x 1 Ġ- Ġx 3 ) Ġ* Ġ( x 2 Ġ- Ġx 4 ) Ġ/ Ġ(( x 1 Ġ- Ġx 4 ) Ġ* Ġ( x 2 Ġ- Ġx 3 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġbi jection Ġof Ġst ereo graphic Ġprojection Ġfrom Ġnorth Ġpole Ġ( 0 , 0 , 1 ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġst ereo graphic Projection ( mc : ĠReal Calculator < T >): ĠBi jection < S Point < T >, ĠComplex E < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠBi jection < S Point < T >, ĠComplex E < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( x : ĠS Point < T >): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// x /( 1 - z ), y /( 1 - z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġmc . subtract ( mc . one , Ġx . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( mc . is Zero ( base )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz 1 Ġ= Ġmc . divide ( x . x , Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġz 2 Ġ= Ġmc . divide ( x . y , Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComplex ( mc , Ġz 1 , Ġz 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġde ply ( y : Ġ@ NotNull ĠComplex E < T >): ĠS Point < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( y Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS Point ( mc , Ġmc . zero , Ġmc . zero , Ġmc . one ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmod Sq Ġ= Ġy . modulus Sq () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġmc . add ( mod Sq , Ġmc . one ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġmc . divide ( mc . multiply Long ( y . a , Ġ 2 ), Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġmc . divide ( mc . multiply Long ( y . b , Ġ 2 ), Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 3 Ġ= Ġmc . divide ( mc . subtract ( mod Sq , Ġmc . one ), Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS Point ( mc , Ġx 1 , Ġx 2 , Ġx 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T > Ġminus Frac ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠComplex E < T >, Ġy 1 : ĠComplex E < T >, Ġy 2 : ĠComplex E < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc : ĠField Calculator < T > ĊĠĠĠĠĠĠĠ Ġ): ĠComplex E < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( x - y 1 )/( x - y 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġone ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y 2 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( y 1 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġone ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzero ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y 1 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinf ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn ume Ġ= Ġx Ġ- Ġy 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġden o Ġ= Ġx Ġ- Ġy 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( deno . is Zero ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n ume . is Zero ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġone ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf ( mc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn ume Ġ/ Ġden o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġcross Ġratio Ġof Ġthe Ġfour Ġcomplex . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠ Ġcross Ratio ( x 1 , x 2 , x 3 , x 4 ) Ġ= Ġ( x 1 - x 3 )( x 2 - x 4 )/ (( x 1 - x 4 )( x 2 - x 3 )) ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠSome Ġproperties : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 1 . Ġcross Ratio ( x 1 , x 2 , x 3 , x 4 ) Ġis Ġreal Ġiff Ġx 1 , x 2 , x 3 , x 4 Ġis Ġon Ġa Ġcircle Ġ( including Ġline ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 2 . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcross Ratio ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 : ĠComplex E < T >, Ġx 2 : ĠComplex E < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 3 : ĠComplex E < T >, Ġx 4 : ĠComplex E < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmc : ĠField Calculator < T > ĊĠĠĠĠĠĠĠ Ġ): ĠComplex E < T > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ( x 1 - x 3 )( x 2 - x 4 )/ (( x 1 - x 4 )( x 2 - x 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x 1 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġminus Frac ( x 2 , Ġx 4 , Ġx 3 , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x 2 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġminus Frac ( x 1 , Ġx 3 , Ġx 4 , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x 3 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġminus Frac ( x 4 , Ġx 2 , Ġx 1 , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x 4 Ġ! is ĠComplex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġminus Frac ( x 3 , Ġx 1 , Ġx 2 , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( x 1 Ġ- Ġx 3 ) Ġ* Ġ( x 2 Ġ- Ġx 4 ) Ġ/ Ġ(( x 1 Ġ- Ġx 4 ) Ġ* Ġ( x 2 Ġ- Ġx 3 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĉ public Ġstatic Ġvoid Ġmain ( String [] Ġargs ) Ġ{ ĊĠĠĠ Ġ// ĉ ĉ // test Ġhere ĊĠĠĠ Ġ// ĉ ĉ Math Calculator < Formula > Ġmc Ġ= ĠFormula . get Calculator (); ĊĠĠĠ Ġ// ĉ ĉ List < Complex < Formula >> Ġlist Ġ= ĠPro gression Sup ĊĠĠĠ Ġ// ĉĉĉ ĉ . create Arithmetic Progress ion ( Formula . valueOf (" 0 . 5 "), Formula . ONE , Ġmc ) ĊĠĠĠ Ġ// ĉĉĉ ĉ . limit ( 1 0 ) ĊĠĠĠ Ġ// ĉĉĉ ĉ . map To ( f Ġ-> ĠComplex . real ( f , Ġmc ), ĠComplex . get Calculator ( mc )) ĊĠĠĠ Ġ// ĉĉĉ ĉ . stream () ĊĠĠĠ Ġ// ĉĉĉ ĉ . collect ( Collectors . toList ()); ĊĠĠĠ Ġ// ĉ ĉ Complex < Formula > Ġmul Ġ= ĠComplex . ins ( Formula . ONE , ĠFormula . ONE . neg ate (), Ġmc ); ĊĠĠĠ Ġ// ĉ ĉ list . forEach ( f Ġ-> ĠPrinter . print ( f . multiply ( mul ))); ĊĠĠĠ Ġ// ĉ } ĊĊ Ċ } ĊĊ Ċ // class ĠComplex E < T > Ġ{ Ċ // ĠĠĠĠ Ċ // Ċ // ĠĠĠ Ġprivate Ġval Ġv : ĠComplex < T >? Ċ // Ċ // ĠĠĠ Ġval Ġis Inf : ĠBoolean Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Name (" is Inf ") Ċ // ĠĠĠĠĠĠĠ Ġget () Ġ= Ġv Ġ== Ġnull Ċ // Ċ // ĠĠĠ Ġval Ġvalue : ĠComplex < T > Ċ // ĠĠĠĠĠĠĠ Ġget () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Inf ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" Inf ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġv !! Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġinternal Ġconstructor ( v : ĠComplex < T >) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġthis . v Ġ= Ġv Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġinternal Ġconstructor () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġv Ġ= Ġnull Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun Ġis Limit ed (): ĠBoolean Ġ= Ġ! is Inf Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Inf ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ" Inf " Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġv . toString () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse Ċ // Ċ // ĠĠĠĠĠĠĠ Ġother Ġas ĠComplex E < *> Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( v Ġ!= Ġother . v ) Ġreturn Ġfalse Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġtrue Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġv ?. hashCode () Ġ?: Ġ 0 Ċ // ĠĠĠ Ġ} Ċ // Ċ // Ċ //}