From 24116f92422981a82d0de0e3505ee4913634ffff Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Wed, 16 Nov 2016 15:21:07 +0300 Subject: [PATCH] A workround for Solaris bugs in acos() and asin(). --- njs/njs_math.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/njs/njs_math.c b/njs/njs_math.c index 2281e276..fbae9a66 100644 --- a/njs/njs_math.c +++ b/njs/njs_math.c @@ -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; -- 2.47.3