+2024-04-06 Bruno Haible <bruno@clisp.org>
+
+ expm1l: Work around a NetBSD 10.0/i386 bug.
+ * m4/expm1l.m4 (gl_FUNC_EXPM1L): Test the value of
+ expm1l(2^LDBL_MIN_EXP).
+ * tests/test-expm1.h (test_function): Allow more deviation on
+ NetBSD/i386.
+
2024-04-05 Bruno Haible <bruno@clisp.org>
exp2l: Work around a NetBSD 10.0/i386 bug.
-# expm1l.m4 serial 10
-dnl Copyright (C) 2010-2023 Free Software Foundation, Inc.
+# expm1l.m4 serial 10.1
+dnl Copyright (C) 2010-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
long double (* volatile my_expm1l) (long double) = argc ? expm1l : dummy;
int result = 0;
/* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x, Mac OS X 10.5,
- NetBSD 8.0. */
+ NetBSD 10.0/x86_64. */
{
const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */
(long double) (1U << ((LDBL_MANT_DIG - 1) / 5))
if (!(err >= -100.0L && err <= 100.0L))
result |= 1;
}
+ /* This test fails on NetBSD 10.0/i386. */
+ {
+ int i;
+ long double x;
+ volatile long double y;
+ for (i = -1, x = 0.5L; i > LDBL_MIN_EXP; i--, x *= 0.5L)
+ ;
+ /* Here i = LDBL_MIN_EXP, x = 2^LDBL_MIN_EXP. */
+ y = my_expm1l (x);
+ if (!(y >= x))
+ result |= 2;
+ }
return result;
}
]])],
/* Test of expm1*() function family.
- Copyright (C) 2012-2023 Free Software Foundation, Inc.
+ Copyright (C) 2012-2024 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/* Error bound, in ulps. */
const DOUBLE err_bound =
(sizeof (DOUBLE) > sizeof (double) ?
-#if defined __i386__ && defined __FreeBSD__
+#if defined __i386__ && defined __NetBSD__
+ L_(1025.0)
+#elif defined __i386__ && defined __FreeBSD__
/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of
precision in the compiler but 64 bits of precision at runtime. See
<https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>.
(sizeof (DOUBLE) > sizeof (double) ?
#if defined __i386__ && defined __FreeBSD__
L_(1536.0)
+#elif defined __i386__ && defined __NetBSD__
+ L_(1026.0)
#else
L_(11.0)
#endif