@@ -1041,6 +1041,11 @@ defmodule Complex do
10411041
10421042 def asin ( n ) when is_number ( n ) , do: :math . asin ( n )
10431043
1044+ def asin ( n ) when is_non_finite_number ( n ) , do: :nan
1045+
1046+ def asin ( % Complex { re: re , im: im } ) when is_non_finite_number ( re ) or is_non_finite_number ( im ) ,
1047+ do: new ( :nan , :nan )
1048+
10441049 def asin ( z = % Complex { } ) do
10451050 i = new ( 0.0 , 1.0 )
10461051 # result = -i*ln(i*z + sqrt(1.0-z*z))
@@ -1110,6 +1115,11 @@ defmodule Complex do
11101115
11111116 def acos ( n ) when is_number ( n ) , do: :math . acos ( n )
11121117
1118+ def acos ( n ) when is_non_finite_number ( n ) , do: :nan
1119+
1120+ def acos ( % Complex { re: re , im: im } ) when is_non_finite_number ( re ) or is_non_finite_number ( im ) ,
1121+ do: new ( :nan , :nan )
1122+
11131123 def acos ( z = % Complex { } ) do
11141124 i = new ( 0.0 , 1.0 )
11151125 one = new ( 1.0 , 0.0 )
@@ -1137,7 +1147,7 @@ defmodule Complex do
11371147
11381148 def tan ( n ) when is_number ( n ) , do: :math . tan ( n )
11391149
1140- def tan ( z = % Complex { } ) do
1150+ def tan ( z ) do
11411151 divide ( sin ( z ) , cos ( z ) )
11421152 end
11431153
@@ -1233,13 +1243,12 @@ defmodule Complex do
12331243 %Complex{im: -2.962299212953233e-16, re: 0.45765755436028577}
12341244
12351245 """
1236- @ spec cot ( t ) :: t
1237- @ spec cot ( number ) :: number
1246+ @ spec cot ( t | number | non_finite_number ) :: t | number | non_finite_number
12381247 def cot ( z )
12391248
12401249 def cot ( n ) when is_number ( n ) , do: 1 / :math . tan ( n )
12411250
1242- def cot ( z = % Complex { } ) do
1251+ def cot ( z ) do
12431252 divide ( cos ( z ) , sin ( z ) )
12441253 end
12451254
@@ -1260,13 +1269,16 @@ defmodule Complex do
12601269 %Complex{im: 2.9999999999999996, re: 1.9999999999999993}
12611270
12621271 """
1263- @ spec acot ( t ) :: t
1264- @ spec acot ( number ) :: number
1272+ @ spec acot ( t | number | non_finite_number ) :: t | number | non_finite_number
12651273 def acot ( z )
12661274
12671275 def acot ( n ) when is_number ( n ) , do: :math . atan ( 1 / n )
12681276
1269- def acot ( z = % Complex { } ) do
1277+ def acot ( :infinity ) , do: 0
1278+ def acot ( :neg_infinity ) , do: :math . pi ( )
1279+ def acot ( :nan ) , do: :nan
1280+
1281+ def acot ( z ) do
12701282 i = new ( 0.0 , 1.0 )
12711283 # result = 0.5*i*(ln(1-i/z)-ln(1+i/z))
12721284 t1 = multiply ( new ( 0.5 , 0.0 ) , i )
@@ -1318,6 +1330,10 @@ defmodule Complex do
13181330 :math . acos ( 1 / n )
13191331 end
13201332
1333+ def asec ( :infinity ) , do: :math . pi ( ) / 2
1334+ def asec ( :neg_infinity ) , do: 3 * :math . pi ( ) / 2
1335+ def asec ( :nan ) , do: :nan
1336+
13211337 def asec ( z = % Complex { } ) do
13221338 i = new ( 0.0 , 1.0 )
13231339 # result = -i*ln(i*sqrt(1-1/(z*z))+1/z)
@@ -1367,11 +1383,13 @@ defmodule Complex do
13671383 %Complex{im: 3.0, re: 1.9999999999999993}
13681384
13691385 """
1370- @ spec acsc ( t ) :: t
1371- @ spec acsc ( number ) :: number
1386+ @ spec acsc ( t | number | non_finite_number ) :: t | number | non_finite_number
13721387 def acsc ( z )
13731388
13741389 def acsc ( n ) when is_number ( n ) , do: :math . asin ( 1 / n )
1390+ def acsc ( :infinity ) , do: 0
1391+ def acsc ( :neg_infinity ) , do: - :math . pi ( )
1392+ def acsc ( :nan ) , do: :nan
13751393
13761394 def acsc ( z = % Complex { } ) do
13771395 i = new ( 0.0 , 1.0 )
@@ -1445,6 +1463,10 @@ defmodule Complex do
14451463 end
14461464 end
14471465
1466+ def asinh ( :infinity ) , do: :infinity
1467+ def asinh ( :neg_infinity ) , do: :neg_infinity
1468+ def asinh ( :nan ) , do: :nan
1469+
14481470 def asinh ( z ) do
14491471 # result = ln(z+sqrt(z*z+1))
14501472 # result = ln(z+sqrt(t1))
@@ -1506,6 +1528,13 @@ defmodule Complex do
15061528 end
15071529 end
15081530
1531+ def acosh ( :infinity ) , do: :infinity
1532+
1533+ def acosh ( :neg_infinity ) ,
1534+ do: raise ( ArithmeticError , "Complex.acosh(:neg_infinity) is undefined" )
1535+
1536+ def acosh ( :nan ) , do: :nan
1537+
15091538 def acosh ( z ) do
15101539 # result = ln(z+sqrt(z*z-1))
15111540 # result = ln(z+sqrt(t1))
0 commit comments