]> git.kaiwu.me - njs.git/commitdiff
A workround for Solaris bugs in acos() and asin().
authorIgor Sysoev <igor@sysoev.ru>
Wed, 16 Nov 2016 12:21:07 +0000 (15:21 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 16 Nov 2016 12:21:07 +0000 (15:21 +0300)
njs/njs_math.c

index 2281e276f943e7932ce2e4c9002786daa0f67d56..fbae9a66782378ccbc6131e7f480c5aa4d1fb03f 100644 (file)
@@ -47,7 +47,16 @@ njs_object_math_acos(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     double  num;
 
     if (nargs > 1) {
-        num = acos(args[1].data.u.number);
+        num = args[1].data.u.number;
+
+#if (NXT_SOLARIS)
+        /* On Solaris acos(x) returns 0 for x > 1. */
+        if (fabs(num) > 1.0) {
+            num = NAN;
+        }
+#endif
+
+        num = acos(num);
 
     } else {
         num = NAN;
@@ -66,7 +75,16 @@ njs_object_math_asin(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     double  num;
 
     if (nargs > 1) {
-        num = asin(args[1].data.u.number);
+        num = args[1].data.u.number;
+
+#if (NXT_SOLARIS)
+        /* On Solaris asin(x) returns 0 for x > 1. */
+        if (fabs(num) > 1.0) {
+            num = NAN;
+        }
+#endif
+
+        num = asin(num);
 
     } else {
         num = NAN;