diff options
-rwxr-xr-x | pl/math/test/runulp.sh | 8 | ||||
-rw-r--r-- | pl/math/v_log1p_2u5.c | 7 |
2 files changed, 10 insertions, 5 deletions
diff --git a/pl/math/test/runulp.sh b/pl/math/test/runulp.sh index 21d0a8c..a1410b4 100755 --- a/pl/math/test/runulp.sh +++ b/pl/math/test/runulp.sh @@ -763,10 +763,10 @@ tanf __s_tanf $runs fenv tanf __v_tanf $runv fenv tanf __vn_tanf $runvn fenv tanf _ZGVnN4v_tanf $runvn fenv -log1p __s_log1p $runs -log1p __v_log1p $runv -log1p __vn_log1p $runvn -log1p _ZGVnN2v_log1p $runvn +log1p __s_log1p $runs fenv +log1p __v_log1p $runv fenv +log1p __vn_log1p $runvn fenv +log1p _ZGVnN2v_log1p $runvn fenv expm1f __s_expm1f $runs fenv expm1f __v_expm1f $runv fenv expm1f __vn_expm1f $runvn fenv diff --git a/pl/math/v_log1p_2u5.c b/pl/math/v_log1p_2u5.c index d97a622..3781522 100644 --- a/pl/math/v_log1p_2u5.c +++ b/pl/math/v_log1p_2u5.c @@ -49,6 +49,11 @@ VPCS_ATTR v_f64_t V_NAME (log1p) (v_f64_t x) = v_cond_u64 ((ia >= v_u64 (0x7ff0000000000000)) | (ix >= 0xbff0000000000000) | (ix == 0x8000000000000000)); +#if WANT_ERRNO + if (unlikely (v_any_u64 (special))) + x = v_sel_f64 (special, v_f64 (0), x); +#endif + /* With x + 1 = t * 2^k (where t = f + 1 and k is chosen such that f is in [sqrt(2)/2, sqrt(2)]): log1p(x) = k*log(2) + log1p(f). @@ -92,7 +97,7 @@ VPCS_ATTR v_f64_t V_NAME (log1p) (v_f64_t x) v_f64_t y = v_fma_f64 (f * f, p, ylo + yhi); if (unlikely (v_any_u64 (special))) - return specialcase (x, y, special); + return specialcase (v_as_f64_u64 (ix), y, special); return y; } |