/* Ġ@ (# ) e _ exp . c Ġ 1 . 6 Ġ 0 4 / 0 4 / 2 2 Ġ*/ Ċ /* Ċ Ġ* Ġ================================================= === Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 0 4 Ġby ĠSun ĠMicro systems , ĠInc . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠPermission Ġto Ġuse , Ġcopy , Ġmodify , Ġand Ġdistribute Ġthis Ċ Ġ* Ġsoftware Ġis Ġfreely Ġgranted , Ġprovided Ġthat Ġthis Ġnotice ĠĊ Ġ* Ġis Ġpreserved . Ċ Ġ* Ġ================================================= === Ċ Ġ*/ Ċ Ċ /* Ġ__ ieee 7 5 4 _ exp ( x ) Ċ Ġ* ĠReturns Ġthe Ġexponential Ġof Ġx . Ċ Ġ* Ċ Ġ* ĠMethod Ċ Ġ* ĠĠĠ 1 . ĠArgument Ġreduction : Ċ Ġ* ĠĠĠĠĠ ĠReduce Ġx Ġto Ġan Ġr Ġso Ġthat Ġ| r | Ġ<= Ġ 0 . 5 * ln 2 Ġ~ Ġ 0 . 3 4 6 5 8 . Ċ Ġ* ĉ Given Ġx , Ġfind Ġr Ġand Ġinteger Ġk Ġsuch Ġthat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġk * ln 2 Ġ+ Ġr , Ġ Ġ| r | Ġ<= Ġ 0 . 5 * ln 2 . ĠĠĊ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠHere Ġr Ġwill Ġbe Ġrepresented Ġas Ġr Ġ= Ġhi - lo Ġfor Ġbetter ĠĊ Ġ* ĉ accuracy . Ċ Ġ* Ċ Ġ* ĠĠĠ 2 . ĠAppro x imation Ġof Ġexp ( r ) Ġby Ġa Ġspecial Ġr ational Ġfunction Ġon Ċ Ġ* ĉ the Ġinterval Ġ[ 0 , 0 . 3 4 6 5 8 ]: Ċ Ġ* ĉ Write Ċ Ġ* ĉĠĠĠ ĠR ( r ** 2 ) Ġ= Ġr *( exp ( r )+ 1 )/( exp ( r )- 1 ) Ġ= Ġ 2 Ġ+ Ġr * r / 6 Ġ- Ġr ** 4 / 3 6 0 Ġ+ Ġ... Ċ Ġ* ĠĠĠĠĠ ĠWe Ġuse Ġa Ġspecial ĠRe mes Ġalgorithm Ġon Ġ[ 0 , 0 . 3 4 6 5 8 ] Ġto Ġgenerate ĠĊ Ġ* Ġ ĉ a Ġpolynomial Ġof Ġdegree Ġ 5 Ġto Ġapproximate ĠR . ĠThe Ġmaximum Ġerror ĠĊ Ġ* ĉ of Ġthis Ġpolynomial Ġapproximation Ġis Ġbounded Ġby Ġ 2 ** - 5 9 . ĠIn Ċ Ġ* ĉ other Ġwords , Ċ Ġ* ĉĠĠĠ ĠR ( z ) Ġ~ Ġ 2 . 0 Ġ+ ĠP 1 * z Ġ+ ĠP 2 * z ** 2 Ġ+ ĠP 3 * z ** 3 Ġ+ ĠP 4 * z ** 4 Ġ+ ĠP 5 * z ** 5 Ċ Ġ* ĠĠ ĉ ( where Ġz = r * r , Ġand Ġthe Ġvalues Ġof ĠP 1 Ġto ĠP 5 Ġare Ġlisted Ġbelow ) Ċ Ġ* ĉ and Ċ Ġ* ĉĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ- 5 9 Ċ Ġ* ĉĠĠĠ Ġ| Ġ 2 . 0 + P 1 * z + ... + P 5 * z ĠĠ Ġ- Ġ ĠR ( z ) Ġ| Ġ<= Ġ 2 ĠĊ Ġ* ĉĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ċ Ġ* ĉ The Ġcomputation Ġof Ġexp ( r ) Ġthus Ġbecomes Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 * r Ċ Ġ* ĉ ĉ exp ( r ) Ġ= Ġ 1 Ġ+ Ġ------- Ċ Ġ* ĉĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR Ġ- Ġr Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr * R 1 ( r ) ĉĊ Ġ* ĉĉ ĠĠĠĠĠĠ Ġ= Ġ 1 Ġ+ Ġr Ġ+ Ġ----------- Ġ( for Ġbetter Ġaccuracy ) Ċ Ġ* ĉĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ- ĠR 1 ( r ) Ċ Ġ* ĉ where Ċ Ġ* ĉĉĉ ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 Ċ Ġ* ĉ ĉ R 1 ( r ) Ġ= Ġr Ġ- Ġ( P 1 * r Ġ Ġ+ ĠP 2 * r Ġ Ġ+ Ġ... Ġ+ ĠP 5 * r ĠĠ Ġ). Ċ Ġ* ĉĊ Ġ* ĠĠĠ 3 . ĠScale Ġback Ġto Ġobtain Ġexp ( x ): Ċ Ġ* ĉ From Ġstep Ġ 1 , Ġwe Ġhave Ċ Ġ* ĉĠĠ Ġexp ( x ) Ġ= Ġ 2 ^ k Ġ* Ġexp ( r ) Ċ Ġ* Ċ Ġ* ĠSpecial Ġcases : Ċ Ġ* ĉ exp ( INF ) Ġis ĠINF , Ġexp ( NaN ) Ġis ĠNaN ; Ċ Ġ* ĉ exp (- INF ) Ġis Ġ 0 , Ġand Ċ Ġ* ĉ for Ġfinite Ġargument , Ġonly Ġexp ( 0 )= 1 Ġis Ġexact . Ċ Ġ* Ċ Ġ* ĠAccuracy : Ċ Ġ* ĉ accord ing Ġto Ġan Ġerror Ġanalysis , Ġthe Ġerror Ġis Ġalways Ġless Ġthan Ċ Ġ* ĉ 1 Ġul p Ġ( unit Ġin Ġthe Ġlast Ġplace ). Ċ Ġ* Ċ Ġ* ĠMisc . Ġinfo . Ċ Ġ* ĉ For ĠIEEE Ġdouble ĠĊ Ġ* ĉĠĠĠ Ġif Ġx Ġ> ĠĠ 7 . 0 9 7 8 2 7 1 2 8 9 3 3 8 3 9 7 3 0 9 6 e + 0 2 Ġthen Ġexp ( x ) Ġoverflow Ċ Ġ* ĉĠĠĠ Ġif Ġx Ġ< Ġ- 7 . 4 5 1 3 3 2 1 9 1 0 1 9 4 1 1 0 8 4 2 0 e + 0 2 Ġthen Ġexp ( x ) Ġunder flow Ċ Ġ* Ċ Ġ* ĠConstants : Ċ Ġ* ĠThe Ġhexadecimal Ġvalues Ġare Ġthe Ġintended Ġones Ġfor Ġthe Ġfollowing ĠĊ Ġ* Ġconstants . ĠThe Ġdecimal Ġvalues Ġmay Ġbe Ġused , Ġprovided Ġthat Ġthe ĠĊ Ġ* Ġcompiler Ġwill Ġconvert Ġfrom Ġdecimal Ġto Ġbinary Ġaccur ately Ġenough Ċ Ġ* Ġto Ġproduce Ġthe Ġhexadecimal Ġvalues Ġshown . Ċ Ġ*/ Ċ Ċ package Ġkotlin . math . fd lib m ĊĊ Ċ private Ġconst Ġval Ġone Ġ= Ġ 1 . 0 Ċ private Ġval Ġhal F Ġ= Ġdouble ArrayOf ( 0 . 5 , Ġ- 0 . 5 ) Ċ private Ġconst Ġval Ġhuge Ġ= Ġ 1 . 0 e + 3 0 0 Ċ private Ġconst Ġval Ġtw om 1 0 0 0 Ġ= Ġ 9 . 3 3 2 6 3 6 1 8 5 0 3 2 1 8 8 7 8 9 9 0 e - 3 0 2 ĠĠĠĠ Ġ/* Ġ 2 ** - 1 0 0 0 = 0 x 0 1 7 0 0 0 0 0 , 0 */ Ċ private Ġconst Ġval Ġo _ threshold Ġ= Ġ 7 . 0 9 7 8 2 7 1 2 8 9 3 3 8 3 9 7 3 0 9 6 e + 0 2 Ġ Ġ/* Ġ 0 x 4 0 8 6 2 E 4 2 , Ġ 0 xFE FA 3 9 EF Ġ*/ Ċ private Ġconst Ġval Ġu _ threshold Ġ= Ġ- 7 . 4 5 1 3 3 2 1 9 1 0 1 9 4 1 1 0 8 4 2 0 e + 0 2 Ġ Ġ/* Ġ 0 xc 0 8 7 4 9 1 0 , Ġ 0 xD 5 2 D 3 0 5 1 Ġ*/ Ċ private Ġval Ġln 2 HI Ġ= Ġdouble ArrayOf ( ĊĠĠĠĠ 6 . 9 3 1 4 7 1 8 0 3 6 9 1 2 3 8 1 6 4 9 0 e - 0 1 , Ġ Ġ/* Ġ 0 x 3 fe 6 2 e 4 2 , Ġ 0 xfe e 0 0 0 0 0 Ġ*/ ĊĠĠĠ Ġ- 6 . 9 3 1 4 7 1 8 0 3 6 9 1 2 3 8 1 6 4 9 0 e - 0 1 , Ċ ) /* Ġ 0 xb fe 6 2 e 4 2 , Ġ 0 xfe e 0 0 0 0 0 Ġ*/ Ċ private Ġval Ġln 2 LO Ġ= Ġdouble ArrayOf ( ĊĠĠĠĠ 1 . 9 0 8 2 1 4 9 2 9 2 7 0 5 8 7 7 0 0 0 2 e - 1 0 , Ġ Ġ/* Ġ 0 x 3 dea 3 9 ef , Ġ 0 x 3 5 7 9 3 c 7 6 Ġ*/ ĊĠĠĠ Ġ- 1 . 9 0 8 2 1 4 9 2 9 2 7 0 5 8 7 7 0 0 0 2 e - 1 0 , Ċ ) /* Ġ 0 xb dea 3 9 ef , Ġ 0 x 3 5 7 9 3 c 7 6 Ġ*/ Ċ private Ġconst Ġval Ġinv ln 2 Ġ= Ġ 1 . 4 4 2 6 9 5 0 4 0 8 8 8 9 6 3 3 8 7 0 0 e + 0 0 Ġ/* Ġ 0 x 3 ff 7 1 5 4 7 , Ġ 0 x 6 5 2 b 8 2 fe Ġ*/ Ċ private Ġconst Ġval ĠP 1 Ġ= Ġ 1 . 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 1 9 0 3 7 e - 0 1 Ġ/* Ġ 0 x 3 FC 5 5 5 5 5 , Ġ 0 x 5 5 5 5 5 5 3 E Ġ*/ Ċ private Ġconst Ġval ĠP 2 Ġ= Ġ- 2 . 7 7 7 7 7 7 7 7 7 7 0 1 5 5 9 3 3 8 4 2 e - 0 3 Ġ/* Ġ 0 xB F 6 6 C 1 6 C , Ġ 0 x 1 6 BE BD 9 3 Ġ*/ Ċ private Ġconst Ġval ĠP 3 Ġ= Ġ 6 . 6 1 3 7 5 6 3 2 1 4 3 7 9 3 4 3 6 1 1 7 e - 0 5 Ġ/* Ġ 0 x 3 F 1 1 5 6 6 A , Ġ 0 x AF 2 5 DE 2 C Ġ*/ Ċ private Ġconst Ġval ĠP 4 Ġ= Ġ- 1 . 6 5 3 3 9 0 2 2 0 5 4 6 5 2 5 1 5 3 9 0 e - 0 6 Ġ/* Ġ 0 x BE BB BD 4 1 , Ġ 0 xC 5 D 2 6 BF 1 Ġ*/ Ċ private Ġconst Ġval ĠP 5 Ġ= Ġ 4 . 1 3 8 1 3 6 7 9 7 0 5 7 2 3 8 4 6 0 3 9 e - 0 8 Ġ/* Ġ 0 x 3 E 6 6 3 7 6 9 , Ġ 0 x 7 2 BE A 4 D 0 Ġ*/ ĊĊ Ċ internal Ġfun Ġ__ ieee 7 5 4 _ exp ( x : ĠDouble ): ĠDouble ĠĠĠ Ġ/* Ġdefault ĠIEEE Ġdouble Ġexp Ġ*/ Ġ{ ĊĠĠĠ Ġvar Ġx : ĠDouble Ġ= Ġx ĊĠĠĠ Ġvar Ġy : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġhi : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġlo : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġc : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġt : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġk : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġx sb : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġhx : ĠUInt Ġ= Ġ 0 U ĊĊĠĠĠ Ġhx Ġ= Ġ__ HI u ( x ) ĠĠĠ Ġ/* Ġhigh Ġword Ġof Ġx Ġ*/ ĊĠĠĠ Ġx sb Ġ= Ġ(( hx Ġshr Ġ 3 1 ) Ġand Ġ 1 U ). toInt () ĠĠĠĠĠĠĠ Ġ/* Ġsign Ġbit Ġof Ġx Ġ*/ ĊĠĠĠ Ġhx Ġ= Ġhx Ġand Ġ 0 x 7 fffffff U ĠĠĠĠĠĠĠ Ġ/* Ġhigh Ġword Ġof Ġ| x | Ġ*/ ĊĊĠĠĠ Ġ/* Ġfilter Ġout Ġnon - finite Ġargument Ġ*/ ĊĠĠĠ Ġif Ġ( hx Ġ>= Ġ 0 x 4 0 8 6 2 E 4 2 U ) Ġ{ ĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġif Ġ| x | >= 7 0 9 . 7 8 ... Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( hx Ġ>= Ġ 0 x 7 ff 0 0 0 0 0 U ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( hx Ġand Ġ 0 xffff f U ) Ġor Ġ__ LO u ( x )) Ġ!= Ġ 0 U ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx Ġ+ Ġx ĠĠĠĠĠĠĠ Ġ/* ĠNaN Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġreturn Ġif Ġ( xs b Ġ== Ġ 0 ) Ġx Ġelse Ġ 0 . 0 ĠĠĠ Ġ/* Ġexp ( +- inf ) ={ inf , 0 } Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ> Ġo _ threshold ) Ġreturn Ġhuge Ġ* Ġhuge Ġ/* Ġoverflow Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġu _ threshold ) Ġreturn Ġtw om 1 0 0 0 Ġ* Ġtw om 1 0 0 0 Ġ/* Ġunder flow Ġ*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ġargument Ġreduction Ġ*/ ĊĠĠĠ Ġif Ġ( hx Ġ> Ġ 0 x 3 fd 6 2 e 4 2 U ) Ġ{ ĠĠĠĠĠĠĠ Ġ/* Ġif Ġ Ġ| x | Ġ> Ġ 0 . 5 Ġln 2 Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( hx Ġ< Ġ 0 x 3 FF 0 A 2 B 2 U ) Ġ{ ĠĠĠ Ġ/* Ġand Ġ| x | Ġ< Ġ 1 . 5 Ġln 2 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhi Ġ= Ġx Ġ- Ġln 2 HI [ xs b ]; Ġlo Ġ= Ġln 2 LO [ xs b ]; Ġk Ġ= Ġ 1 Ġ- Ġx sb Ġ- Ġx sb ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk Ġ= Ġ( inv ln 2 Ġ* Ġx Ġ+ Ġhal F [ xs b ]). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġk . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhi Ġ= Ġx Ġ- Ġt Ġ* Ġln 2 HI [ 0 ] ĠĠĠ Ġ/* Ġt * ln 2 HI Ġis Ġexact Ġhere Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo Ġ= Ġt Ġ* Ġln 2 LO [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġhi Ġ- Ġlo ĊĠĠĠ Ġ} Ġelse Ġif Ġ( hx Ġ< Ġ 0 x 3 e 3 0 0 0 0 0 U ) Ġ{ ĠĠĠ Ġ/* Ġwhen Ġ| x |< 2 ** - 2 8 Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( huge Ġ+ Ġx Ġ> Ġone ) Ġreturn Ġone Ġ+ Ġx /* Ġtrigger Ġin exact Ġ*/ ĊĠĠĠ Ġ} Ġelse Ġk Ġ= Ġ 0 ĊĊĠĠĠ Ġ/* Ġx Ġis Ġnow Ġin Ġprimary Ġrange Ġ*/ ĊĠĠĠ Ġt Ġ= Ġx Ġ* Ġx ĊĠĠĠ Ġc Ġ= Ġx Ġ- Ġt Ġ* Ġ( P 1 Ġ+ Ġt Ġ* Ġ( P 2 Ġ+ Ġt Ġ* Ġ( P 3 Ġ+ Ġt Ġ* Ġ( P 4 Ġ+ Ġt Ġ* ĠP 5 )))) ĊĠĠĠ Ġif Ġ( k Ġ== Ġ 0 ) Ġreturn Ġone Ġ- Ġ(( x Ġ* Ġc ) Ġ/ Ġ( c Ġ- Ġ 2 . 0 ) Ġ- Ġx ) ĊĠĠĠ Ġelse Ġy Ġ= Ġone Ġ- Ġ(( lo Ġ- Ġ( x Ġ* Ġc ) Ġ/ Ġ( 2 . 0 Ġ- Ġc )) Ġ- Ġhi ) ĊĠĠĠ Ġif Ġ( k Ġ>= Ġ- 1 0 2 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġdouble Set Word ( d Ġ= Ġy , Ġhi Ġ= Ġ__ HI ( y ) Ġ+ Ġ( k Ġshl Ġ 2 0 )) ĠĠĠ Ġ/* Ġadd Ġk Ġto Ġy 's Ġexponent Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn Ġy ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġdouble Set Word ( d Ġ= Ġy , Ġhi Ġ= Ġ__ HI ( y ) Ġ+ Ġ(( k Ġ+ Ġ 1 0 0 0 ) Ġshl Ġ 2 0 )) /* Ġadd Ġk Ġto Ġy 's Ġexponent Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn Ġy Ġ* Ġtw om 1 0 0 0 ĊĠĠĠ Ġ} Ċ } Ċ