@@ -973,14 +973,19 @@ defmodule Complex do
973973 def sin ( n ) when is_number ( n ) , do: :math . sin ( n )
974974 def sin ( n ) when is_non_finite_number ( n ) , do: :nan
975975
976- def sin ( % Complex { re: re , im: _ } ) when is_non_finite_number ( re ) , do: :nan
976+ def sin ( % Complex { re: re , im: im } ) when is_non_finite_number ( re ) and is_number ( im ) ,
977+ do: Complex . new ( :nan , :nan )
977978
978- def sin ( % Complex { re: re , im: im } ) when is_number ( re ) and is_non_finite_number ( im ) ,
979- do:
980- new (
981- multiply ( :math . sin ( re ) , cosh ( im ) ) ,
982- multiply ( :math . sin ( re ) , sinh ( im ) )
983- )
979+ def sin ( % Complex { im: :nan } ) , do: Complex . new ( :nan , :nan )
980+ def sin ( % Complex { re: :nan } ) , do: Complex . new ( :nan , :nan )
981+
982+ def sin ( % Complex { re: re , im: im } ) when is_number ( re ) and is_non_finite_number ( im ) do
983+ Complex . new ( multiply ( re , im ) , im )
984+ end
985+
986+ def sin ( % Complex { re: re , im: im } ) when is_non_finite_number ( re ) and is_non_finite_number ( im ) do
987+ Complex . new ( :nan , :nan )
988+ end
984989
985990 def sin ( z = % Complex { } ) do
986991 new (
@@ -1065,11 +1070,18 @@ defmodule Complex do
10651070
10661071 def cos ( n ) when is_non_finite_number ( n ) , do: :nan
10671072
1073+ def cos ( % Complex { re: re , im: im } ) when is_non_finite_number ( re ) and is_number ( im ) ,
1074+ do: Complex . new ( :nan , :nan )
1075+
1076+ def cos ( % Complex { im: :nan } ) , do: Complex . new ( :nan , :nan )
1077+ def cos ( % Complex { re: :nan } ) , do: Complex . new ( :nan , :nan )
1078+
10681079 def cos ( % Complex { re: re , im: im } ) when is_number ( re ) and is_non_finite_number ( im ) do
1069- new (
1070- multiply ( :math . cos ( re ) , cosh ( im ) ) ,
1071- multiply ( :math . sin ( - re ) , sinh ( im ) )
1072- )
1080+ Complex . new ( :infinity , - 1 |> multiply ( im ) |> multiply ( re ) )
1081+ end
1082+
1083+ def cos ( % Complex { re: re , im: im } ) when is_non_finite_number ( re ) and is_non_finite_number ( im ) do
1084+ Complex . new ( :nan , :nan )
10731085 end
10741086
10751087 def cos ( z = % Complex { } ) do
0 commit comments