+2008-10-07 Bruno Haible <bruno@clisp.org>
+
+ Use a more portable replacement expression for -0.0L.
+ * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Use -LDBL_MIN * LDBL_MIN
+ instead of -0.0L. Fix m4 quotation.
+
+ * tests/test-signbit.c: Include <float.h>.
+ (minus_zero): New variable.
+ (test_signbitl): Use minus_zero instead of -zero.
+ * modules/signbit-tests (Depends-on): Add float.
+
+ * tests/test-ceill.c: Include <float.h>.
+ (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/ceill-tests (Depends-on): Add float.
+
+ * tests/test-floorl.c: Include <float.h>.
+ (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/floorl-tests (Depends-on): Add float.
+
+ * tests/test-roundl.c: Include <float.h>.
+ (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/roundl-tests (Depends-on): Add float.
+
+ * tests/test-truncl.c: Include <float.h>.
+ (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/truncl-tests (Depends-on): Add float.
+
+ * tests/test-frexpl.c (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/frexpl-tests (Depends-on): Add float.
+
+ * tests/test-isnan.c (zerol): Remove variable.
+ (minus_zerol): New variable.
+ (test_long_double): Use minus_zerol instead of -zerol.
+ * modules/isnan-tests (Depends-on): Add float.
+
+ * tests/test-isnanl.h (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/isnanl-nolibm-tests (Depends-on): Add float.
+ * modules/isnanl-tests (Depends-on): Add float.
+
+ * tests/test-ldexpl.c (zero): Remove variable.
+ (minus_zero): New variable.
+ (main): Use minus_zero instead of -zero.
+ * modules/ldexpl-tests (Depends-on): Add float.
+
+ * tests/test-snprintf-posix.h (zerol): Remove variable.
+ (minus_zerol): New variable.
+ (test_function): Use minus_zerol instead of -zerol.
+ * modules/snprintf-posix-tests (Depends-on): Add float.
+ * modules/vsnprintf-posix-tests (Depends-on): Add float.
+
+ * tests/test-sprintf-posix.h (zerol): Remove variable.
+ (minus_zerol): New variable.
+ (test_function): Use minus_zerol instead of -zerol.
+ * modules/sprintf-posix-tests (Depends-on): Add float.
+ * modules/vsprintf-posix-tests (Depends-on): Add float.
+
+ * tests/test-vasnprintf-posix.c (zerol): Remove variable.
+ (minus_zerol): New variable.
+ (test_function): Use minus_zerol instead of -zerol.
+ * modules/vasnprintf-posix-tests (Depends-on): Add float.
+
+ * tests/test-vasprintf-posix.c (zerol): Remove variable.
+ (minus_zerol): New variable.
+ (test_function): Use minus_zerol instead of -zerol.
+ * modules/vasprintf-posix-tests (Depends-on): Add float.
+
2008-10-07 Simon Josefsson <simon@josefsson.org>
* MODULES.html.sh (Support for building documentation): Mention
-# signbit.m4 serial 3
+# signbit.m4 serial 4
dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
fi
])
-AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [
+AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
- So we use -p0f instead. */
+ So we use -p0f and -p0d instead. */
float p0f = 0.0f;
float m0f = -p0f;
double p0d = 0.0;
double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use another constant expression instead. */
long double p0l = 0.0L;
+#ifdef __hpux
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
long double m0l = -p0l;
+#endif
int main ()
{
{
}
return 0;
}
-])
+]])
AC_DEFUN([gl_FLOAT_SIGN_LOCATION],
[
Depends-on:
fpucw
isnanl-nolibm
+float
configure.ac:
Depends-on:
fpucw
isnanl-nolibm
+float
configure.ac:
fpucw
isnanl-nolibm
signbit
+float
configure.ac:
tests/nan.h
Depends-on:
+float
configure.ac:
gl_FLOAT_EXPONENT_LOCATION
tests/test-isnanl.h
Depends-on:
+float
configure.ac:
gl_LONG_DOUBLE_EXPONENT_LOCATION
tests/test-isnanl.h
Depends-on:
+float
configure.ac:
gl_LONG_DOUBLE_EXPONENT_LOCATION
fpucw
isnanl-nolibm
signbit
+float
configure.ac:
Depends-on:
fpucw
isnanl-nolibm
+float
configure.ac:
m4/exponentl.m4
Depends-on:
+float
configure.ac:
AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION])
Depends-on:
stdint
+float
configure.ac:
AC_DEFINE([CHECK_SNPRINTF_POSIX], 1,
Depends-on:
stdint
+float
configure.ac:
Depends-on:
fpucw
isnanl-nolibm
+float
configure.ac:
Depends-on:
stdint
+float
configure.ac:
gt_LOCALE_FR
Depends-on:
stdint
+float
configure.ac:
Depends-on:
stdint
+float
configure.ac:
AC_DEFINE([CHECK_VSNPRINTF_POSIX], 1,
Depends-on:
stdint
+float
configure.ac:
#include <math.h>
+#include <float.h>
#include <stdio.h>
#include <stdlib.h>
} \
while (0)
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
int
main ()
/* Zero. */
ASSERT (ceill (0.0L) == 0.0L);
- ASSERT (ceill (-zero) == 0.0L);
+ ASSERT (ceill (minus_zero) == 0.0L);
/* Positive numbers. */
ASSERT (ceill (0.3L) == 1.0L);
ASSERT (ceill (0.7L) == 1.0L);
#include <math.h>
+#include <float.h>
#include <stdio.h>
#include <stdlib.h>
} \
while (0)
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
int
main ()
/* Zero. */
ASSERT (floorl (0.0L) == 0.0L);
- ASSERT (floorl (-zero) == 0.0L);
+ ASSERT (floorl (minus_zero) == 0.0L);
/* Positive numbers. */
ASSERT (floorl (0.3L) == 0.0L);
ASSERT (floorl (0.7L) == 0.0L);
# define MIN_NORMAL_EXP LDBL_MIN_EXP
#endif
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
static long double
my_ldexp (long double x, int d)
{ /* Negative zero. */
int exp = -9999;
long double mantissa;
- x = -zero;
+ x = minus_zero;
mantissa = frexpl (x, &exp);
ASSERT (exp == 0);
ASSERT (mantissa == x);
So we use -zero instead. */
double zerod = 0.0;
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zerol = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zerol instead. */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
static void
test_float (void)
ASSERT (!isnan (-2.718e30L));
ASSERT (!isnan (-2.718e-30L));
ASSERT (!isnan (0.0L));
- ASSERT (!isnan (-zerol));
+ ASSERT (!isnan (minus_zerol));
/* Infinite values. */
ASSERT (!isnan (1.0L / 0.0L));
ASSERT (!isnan (-1.0L / 0.0L));
} \
while (0)
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
int
main ()
ASSERT (!isnanl (-2.718e30L));
ASSERT (!isnanl (-2.718e-30L));
ASSERT (!isnanl (0.0L));
- ASSERT (!isnanl (-zero));
+ ASSERT (!isnanl (minus_zero));
/* Infinite values. */
ASSERT (!isnanl (1.0L / 0.0L));
ASSERT (!isnanl (-1.0L / 0.0L));
} \
while (0)
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
int
main ()
}
{ /* Negative zero. */
- x = -zero;
+ x = minus_zero;
y = ldexpl (x, 0); ASSERT (y == x); ASSERT (signbit (x));
y = ldexpl (x, 5); ASSERT (y == x); ASSERT (signbit (x));
y = ldexpl (x, -5); ASSERT (y == x); ASSERT (signbit (x));
#include <math.h>
+#include <float.h>
#include <stdio.h>
#include <stdlib.h>
} \
while (0)
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
int
main ()
/* Zero. */
ASSERT (roundl (0.0L) == 0.0L);
- ASSERT (roundl (-zero) == 0.0L);
+ ASSERT (roundl (minus_zero) == 0.0L);
/* Positive numbers. */
ASSERT (roundl (0.3L) == 0.0L);
ASSERT (roundl (0.5L) == 1.0L);
#include <math.h>
+#include <float.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
double zerod = 0.0;
long double zerol = 0.0L;
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zerof instead. */
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zerod instead. */
+
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zerol instead. */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
+
static void
test_signbitf ()
{
ASSERT (signbit (-2.718e-30L));
/* Zeros. */
ASSERT (!signbit (0.0L));
- if (1.0L / -zerol < 0)
- ASSERT (signbit (-zerol));
+ if (1.0L / minus_zerol < 0)
+ ASSERT (signbit (minus_zerol));
else
- ASSERT (!signbit (-zerol));
+ ASSERT (!signbit (minus_zerol));
/* Infinite values. */
ASSERT (!signbit (1.0L / 0.0L));
ASSERT (signbit (-1.0L / 0.0L));
}
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
- So we use -zero instead. */
+ So we use -zerod instead. */
double zerod = 0.0;
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zerol = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zerol instead. */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%La %d", -zerol, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%La %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%Lf %d", -zerol, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%Lf %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%LF %d", -zerol, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%LF %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%Le %d", -zerol, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%Le %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
|| strcmp (result, "-0.000000e+000 33") == 0);
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%Lg %d", -zerol, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%Lg %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
ASSERT (retval == strlen (result));
}
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
- So we use -zero instead. */
+ So we use -zerod instead. */
double zerod = 0.0;
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zerol = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zerol instead. */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%La %d", -zerol, 33, 44, 55);
+ my_sprintf (result, "%La %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%Lf %d", -zerol, 33, 44, 55);
+ my_sprintf (result, "%Lf %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%LF %d", -zerol, 33, 44, 55);
+ my_sprintf (result, "%LF %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%Le %d", -zerol, 33, 44, 55);
+ my_sprintf (result, "%Le %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
|| strcmp (result, "-0.000000e+000 33") == 0);
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%Lg %d", -zerol, 33, 44, 55);
+ my_sprintf (result, "%Lg %d", minus_zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
ASSERT (retval == strlen (result));
#include <math.h>
+#include <float.h>
#include <stdio.h>
#include <stdlib.h>
} \
while (0)
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zero = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zero instead. */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
int
main ()
/* Zero. */
ASSERT (truncl (0.0L) == 0.0L);
- ASSERT (truncl (-zero) == 0.0L);
+ ASSERT (truncl (minus_zero) == 0.0L);
/* Positive numbers. */
ASSERT (truncl (0.3L) == 0.0L);
ASSERT (truncl (0.7L) == 0.0L);
}
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
- So we use -zero instead. */
+ So we use -zerod instead. */
double zerod = 0.0;
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zerol = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zerol instead. */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%La %d", -zerol, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%La %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%Lf %d", -zerol, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%Lf %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%LF %d", -zerol, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%LF %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%Le %d", -zerol, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%Le %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%Lg %d", -zerol, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%Lg %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
}
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
- So we use -zero instead. */
+ So we use -zerod instead. */
double zerod = 0.0;
-/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
- So we use -zero instead. */
-long double zerol = 0.0L;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+ So we use minus_zerol instead. */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%La %d", -zerol, 33, 44, 55);
+ my_asprintf (&result, "%La %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%Lf %d", -zerol, 33, 44, 55);
+ my_asprintf (&result, "%Lf %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%LF %d", -zerol, 33, 44, 55);
+ my_asprintf (&result, "%LF %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%Le %d", -zerol, 33, 44, 55);
+ my_asprintf (&result, "%Le %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%Lg %d", -zerol, 33, 44, 55);
+ my_asprintf (&result, "%Lg %d", minus_zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);