Bring from CoreFX the f813aa2e9a5d927d121d6bdca467e10e9a6e0c9b fix for Asin and Acos
authorMiguel de Icaza <miguel@gnome.org>
Thu, 19 Nov 2015 14:09:57 +0000 (09:09 -0500)
committerMarek Safar <marek.safar@gmail.com>
Tue, 3 May 2016 09:40:05 +0000 (11:40 +0200)
mcs/class/referencesource/System.Numerics/System/Numerics/Complex.cs

index 579a964462b778df906be6909ff3407658a93d06..ce88cda7498d93383e91446811c5ef9156ed5b41 100644 (file)
@@ -300,6 +300,10 @@ namespace System.Numerics {
         }
         public static Complex Asin(Complex value) /* Arcsin */
         {
+           if ((value.m_imaginary == 0 && value.m_real < 0) || value.m_imaginary > 0)
+            {
+                return -Asin(-value);
+            }
             return (-ImaginaryOne) * Log(ImaginaryOne * value + Sqrt(One - value * value));
         }
 
@@ -318,6 +322,10 @@ namespace System.Numerics {
         }
         public static Complex Acos(Complex value) /* Arccos */
         {
+            if ((value.m_imaginary == 0 && value.m_real > 0) || value.m_imaginary < 0)
+            {
+                return System.Math.PI - Acos(-value);
+            }
             return (-ImaginaryOne) * Log(value + ImaginaryOne*Sqrt(One - (value * value)));
 
         }