mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-08 17:22:05 +03:00
Guarantee a definition of NAN.
* lib/math.in.h (NAN): Define if missing. * tests/test-math.c (main): Test it. * doc/posix-headers/math.texi (math.h): Document this. * lib/isnan.c (rpl_isnand): Use it. * tests/test-ceilf1.c (NaN): Delete, and use NAN instead. * tests/test-floorf1.c (NaN): Likewise. * tests/test-frexp.c (NaN): Likewise. * tests/test-isnand.c (NaN): Likewise. * tests/test-isnanf.c (NaN): Likewise. * tests/test-round1.c (NaN): Likewise. * tests/test-roundf1.c (NaN): Likewise. * tests/test-snprintf-posix.h (NaN): Likewise. * tests/test-sprintf-posix.h (NaN): Likewise. * tests/test-trunc1.c (NaN): Likewise. * tests/test-truncf1.c (NaN): Likewise. * tests/test-vasnprintf-posix.c (NaN): Likewise. * tests/test-vasprintf-posix.c (NaN): Likewise. * modules/isnand-nolibm (Depends-on): Add math. * modules/isnanf-nolibm (Depends-on): Likewise. * modules/isnanl (Depends-on): Likewise. * modules/isnanl-nolibm (Depends-on): Likewise. * modules/snprintf-posix-tests (Depends-on): Likewise. * modules/sprintf-posix-tests (Depends-on): Likewise. * modules/vsnprintf-posix-tests (Depends-on): Likewise. * modules/vsprintf-posix-tests (Depends-on): Likewise. * modules/vasnprintf-posix-tests (Depends-on): Likewise. * modules/vasprintf-posix-tests (Depends-on): Likewise. Signed-off-by: Eric Blake <ebb9@byu.net>
This commit is contained in:
31
ChangeLog
31
ChangeLog
@@ -1,3 +1,34 @@
|
||||
2008-03-31 Eric Blake <ebb9@byu.net>
|
||||
|
||||
Guarantee a definition of NAN.
|
||||
* lib/math.in.h (NAN): Define if missing.
|
||||
* tests/test-math.c (main): Test it.
|
||||
* doc/posix-headers/math.texi (math.h): Document this.
|
||||
* lib/isnan.c (rpl_isnand): Use it.
|
||||
* tests/test-ceilf1.c (NaN): Delete, and use NAN instead.
|
||||
* tests/test-floorf1.c (NaN): Likewise.
|
||||
* tests/test-frexp.c (NaN): Likewise.
|
||||
* tests/test-isnand.c (NaN): Likewise.
|
||||
* tests/test-isnanf.c (NaN): Likewise.
|
||||
* tests/test-round1.c (NaN): Likewise.
|
||||
* tests/test-roundf1.c (NaN): Likewise.
|
||||
* tests/test-snprintf-posix.h (NaN): Likewise.
|
||||
* tests/test-sprintf-posix.h (NaN): Likewise.
|
||||
* tests/test-trunc1.c (NaN): Likewise.
|
||||
* tests/test-truncf1.c (NaN): Likewise.
|
||||
* tests/test-vasnprintf-posix.c (NaN): Likewise.
|
||||
* tests/test-vasprintf-posix.c (NaN): Likewise.
|
||||
* modules/isnand-nolibm (Depends-on): Add math.
|
||||
* modules/isnanf-nolibm (Depends-on): Likewise.
|
||||
* modules/isnanl (Depends-on): Likewise.
|
||||
* modules/isnanl-nolibm (Depends-on): Likewise.
|
||||
* modules/snprintf-posix-tests (Depends-on): Likewise.
|
||||
* modules/sprintf-posix-tests (Depends-on): Likewise.
|
||||
* modules/vsnprintf-posix-tests (Depends-on): Likewise.
|
||||
* modules/vsprintf-posix-tests (Depends-on): Likewise.
|
||||
* modules/vasnprintf-posix-tests (Depends-on): Likewise.
|
||||
* modules/vasprintf-posix-tests (Depends-on): Likewise.
|
||||
|
||||
2008-03-31 Bruno Haible <bruno@clisp.org>
|
||||
|
||||
* tests/test-strtod.c (main): Update results for OSF/1 platforms.
|
||||
|
@@ -7,8 +7,14 @@ Gnulib module: math
|
||||
|
||||
Portability problems fixed by Gnulib:
|
||||
@itemize
|
||||
@item
|
||||
Some platforms do not provide a definition of NAN:
|
||||
Solaris 8.
|
||||
|
||||
@end itemize
|
||||
|
||||
Portability problems not fixed by Gnulib:
|
||||
@itemize
|
||||
NAN is not a compile time constant with some broken compilers:
|
||||
Compaq (ex-DEC) C 6.4
|
||||
@end itemize
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "float+.h"
|
||||
@@ -111,11 +112,10 @@ FUNC (DOUBLE x)
|
||||
also fails when constant-folding 0.0 / 0.0 even when constant-folding is
|
||||
not required. The SGI MIPSpro C compiler complains about "floating-point
|
||||
operation result is out of range". */
|
||||
static DOUBLE zero = L_(0.0);
|
||||
memory_double nan;
|
||||
DOUBLE plus_inf = L_(1.0) / L_(0.0);
|
||||
DOUBLE minus_inf = -L_(1.0) / L_(0.0);
|
||||
nan.value = zero / zero;
|
||||
nan.value = NAN;
|
||||
# else
|
||||
static memory_double nan = { L_(0.0) / L_(0.0) };
|
||||
static DOUBLE plus_inf = L_(1.0) / L_(0.0);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/* A GNU-like <math.h>.
|
||||
|
||||
Copyright (C) 2002-2003, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2003, 2007, 2008 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
|
||||
@@ -32,6 +32,24 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* POSIX allows platforms that don't support NAN. But all major
|
||||
machines in the past 15 years have supported something close to
|
||||
IEEE NaN, so we define this unconditionally. */
|
||||
#ifndef NAN
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
# ifdef __DECC
|
||||
static float
|
||||
_NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
# define NAN (_NaN())
|
||||
# else
|
||||
# define NAN (0.0f / 0.0f)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Write x as
|
||||
x = mantissa * 2^exp
|
||||
where
|
||||
|
@@ -10,6 +10,7 @@ m4/isnand.m4
|
||||
|
||||
Depends-on:
|
||||
fpieee
|
||||
math
|
||||
|
||||
configure.ac:
|
||||
gl_FUNC_ISNAND_NO_LIBM
|
||||
|
@@ -10,6 +10,7 @@ m4/isnanf.m4
|
||||
|
||||
Depends-on:
|
||||
fpieee
|
||||
math
|
||||
|
||||
configure.ac:
|
||||
gl_FUNC_ISNANF_NO_LIBM
|
||||
|
@@ -11,6 +11,7 @@ m4/isnanl.m4
|
||||
Depends-on:
|
||||
float
|
||||
fpieee
|
||||
math
|
||||
|
||||
configure.ac:
|
||||
gl_FUNC_ISNANL
|
||||
|
@@ -11,6 +11,7 @@ m4/isnanl.m4
|
||||
Depends-on:
|
||||
float
|
||||
fpieee
|
||||
math
|
||||
|
||||
configure.ac:
|
||||
gl_FUNC_ISNANL_NO_LIBM
|
||||
|
@@ -4,6 +4,7 @@ tests/test-snprintf-posix.h
|
||||
tests/test-snprintf.c
|
||||
|
||||
Depends-on:
|
||||
math
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
@@ -3,6 +3,7 @@ tests/test-sprintf-posix.c
|
||||
tests/test-sprintf-posix.h
|
||||
|
||||
Depends-on:
|
||||
math
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
@@ -5,6 +5,7 @@ tests/test-vasnprintf-posix2.c
|
||||
m4/locale-fr.m4
|
||||
|
||||
Depends-on:
|
||||
math
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
@@ -2,6 +2,7 @@ Files:
|
||||
tests/test-vasprintf-posix.c
|
||||
|
||||
Depends-on:
|
||||
math
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
@@ -4,6 +4,7 @@ tests/test-snprintf-posix.h
|
||||
tests/test-vsnprintf.c
|
||||
|
||||
Depends-on:
|
||||
math
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
@@ -3,6 +3,7 @@ tests/test-vsprintf-posix.c
|
||||
tests/test-sprintf-posix.h
|
||||
|
||||
Depends-on:
|
||||
math
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Test of rounding towards positive infinity.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2008 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
|
||||
@@ -36,18 +36,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static float
|
||||
NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0f / 0.0f)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -79,7 +67,7 @@ main ()
|
||||
ASSERT (ceilf (1.0f / 0.0f) == 1.0f / 0.0f);
|
||||
ASSERT (ceilf (-1.0f / 0.0f) == -1.0f / 0.0f);
|
||||
/* NaNs. */
|
||||
ASSERT (isnanf (ceilf (NaN ())));
|
||||
ASSERT (isnanf (ceilf (NAN)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Test of rounding towards negative infinity.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2008 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
|
||||
@@ -36,18 +36,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static float
|
||||
NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0f / 0.0f)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -79,7 +67,7 @@ main ()
|
||||
ASSERT (floorf (1.0f / 0.0f) == 1.0f / 0.0f);
|
||||
ASSERT (floorf (-1.0f / 0.0f) == -1.0f / 0.0f);
|
||||
/* NaNs. */
|
||||
ASSERT (isnanf (floorf (NaN ())));
|
||||
ASSERT (isnanf (floorf (NAN)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -37,18 +37,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
|
||||
static double
|
||||
my_ldexp (double x, int d)
|
||||
{
|
||||
@@ -73,7 +61,7 @@ main ()
|
||||
{ /* NaN. */
|
||||
int exp = -9999;
|
||||
double mantissa;
|
||||
x = NaN ();
|
||||
x = NAN;
|
||||
mantissa = frexp (x, &exp);
|
||||
ASSERT (isnand (mantissa));
|
||||
}
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "isnand.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -35,18 +36,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -63,7 +52,7 @@ main ()
|
||||
ASSERT (!isnand (1.0 / 0.0));
|
||||
ASSERT (!isnand (-1.0 / 0.0));
|
||||
/* Quiet NaN. */
|
||||
ASSERT (isnand (NaN ()));
|
||||
ASSERT (isnand (NAN));
|
||||
#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
|
||||
/* Signalling NaN. */
|
||||
{
|
||||
@@ -71,7 +60,7 @@ main ()
|
||||
((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
|
||||
typedef union { double value; unsigned int word[NWORDS]; } memory_double;
|
||||
memory_double m;
|
||||
m.value = NaN ();
|
||||
m.value = NAN;
|
||||
# if DBL_EXPBIT0_BIT > 0
|
||||
m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1);
|
||||
# else
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Test of isnanf() substitute.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2008 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
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "isnanf.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -35,18 +36,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static float
|
||||
NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0f / 0.0f)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -63,7 +52,7 @@ main ()
|
||||
ASSERT (!isnanf (1.0f / 0.0f));
|
||||
ASSERT (!isnanf (-1.0f / 0.0f));
|
||||
/* Quiet NaN. */
|
||||
ASSERT (isnanf (NaN ()));
|
||||
ASSERT (isnanf (NAN));
|
||||
#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
|
||||
/* Signalling NaN. */
|
||||
{
|
||||
@@ -71,7 +60,7 @@ main ()
|
||||
((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
|
||||
typedef union { float value; unsigned int word[NWORDS]; } memory_float;
|
||||
memory_float m;
|
||||
m.value = NaN ();
|
||||
m.value = NAN;
|
||||
# if FLT_EXPBIT0_BIT > 0
|
||||
m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1);
|
||||
# else
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Test of <math.h> substitute.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2008 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
|
||||
@@ -20,8 +20,14 @@
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#ifndef NAN
|
||||
# error NAN should be defined
|
||||
choke me
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return 0;
|
||||
double d = NAN;
|
||||
return d == d;
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
|
||||
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
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
@@ -38,18 +38,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -86,7 +74,7 @@ main ()
|
||||
ASSERT (round (1.0 / 0.0) == 1.0 / 0.0);
|
||||
ASSERT (round (-1.0 / 0.0) == -1.0 / 0.0);
|
||||
/* NaNs. */
|
||||
ASSERT (isnand (round (NaN ())));
|
||||
ASSERT (isnand (round (NAN)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,9 +1,9 @@
|
||||
/* Test of rounding to nearest, breaking ties away from zero.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2008 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
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
@@ -38,18 +38,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static float
|
||||
NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0f / 0.0f)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -86,7 +74,7 @@ main ()
|
||||
ASSERT (roundf (1.0 / 0.0f) == 1.0 / 0.0f);
|
||||
ASSERT (roundf (-1.0 / 0.0f) == -1.0 / 0.0f);
|
||||
/* NaNs. */
|
||||
ASSERT (isnanf (roundf (NaN ())));
|
||||
ASSERT (isnanf (roundf (NAN)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -16,17 +16,7 @@
|
||||
|
||||
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
|
||||
static int
|
||||
@@ -207,7 +197,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%a %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%a %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -404,7 +394,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%050a %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%050a %d", NAN, 33, 44, 55);
|
||||
/* "0000000nan 33" is not a valid result; see
|
||||
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
@@ -918,7 +908,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%f %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%f %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -999,7 +989,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%050f %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%050f %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -1414,7 +1404,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%F %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%F %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 1)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -1708,7 +1698,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%e %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%e %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -1799,7 +1789,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%050e %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%050e %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -2316,7 +2306,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%g %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%g %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -2400,7 +2390,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[100];
|
||||
int retval =
|
||||
my_snprintf (result, sizeof (result), "%050g %d", NaN (), 33, 44, 55);
|
||||
my_snprintf (result, sizeof (result), "%050g %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
|
@@ -16,17 +16,7 @@
|
||||
|
||||
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
|
||||
static int
|
||||
@@ -193,7 +183,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%a %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%a %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -390,7 +380,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%050a %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%050a %d", NAN, 33, 44, 55);
|
||||
/* "0000000nan 33" is not a valid result; see
|
||||
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
@@ -904,7 +894,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%f %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%f %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -979,7 +969,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%050f %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%050f %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -1388,7 +1378,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%F %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%F %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 1)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -1682,7 +1672,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%e %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%e %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -1773,7 +1763,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%050e %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%050e %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -2290,7 +2280,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%g %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%g %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
@@ -2374,7 +2364,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char result[1000];
|
||||
int retval =
|
||||
my_sprintf (result, "%050g %d", NaN (), 33, 44, 55);
|
||||
my_sprintf (result, "%050g %d", NAN, 33, 44, 55);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
&& strcmp (result + strlen (result) - 3, " 33") == 0);
|
||||
|
@@ -36,18 +36,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -78,7 +66,7 @@ main ()
|
||||
ASSERT (trunc (1.0 / 0.0) == 1.0 / 0.0);
|
||||
ASSERT (trunc (-1.0 / 0.0) == -1.0 / 0.0);
|
||||
/* NaNs. */
|
||||
ASSERT (isnand (trunc (NaN ())));
|
||||
ASSERT (isnand (trunc (NAN)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* Test of rounding towards zero.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2008 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
|
||||
@@ -36,18 +36,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static float
|
||||
NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0f / 0.0f)
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -78,7 +66,7 @@ main ()
|
||||
ASSERT (truncf (1.0f / 0.0f) == 1.0f / 0.0f);
|
||||
ASSERT (truncf (-1.0f / 0.0f) == -1.0f / 0.0f);
|
||||
/* NaNs. */
|
||||
ASSERT (isnanf (truncf (NaN ())));
|
||||
ASSERT (isnanf (truncf (NAN)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "vasnprintf.h"
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
@@ -40,18 +41,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
|
||||
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
|
||||
static int
|
||||
have_minus_zero ()
|
||||
@@ -257,7 +246,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%a %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%a %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -490,7 +479,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%050a %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%050a %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
/* "0000000nan 33" is not a valid result; see
|
||||
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
||||
@@ -1086,7 +1075,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%f %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%f %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -1179,7 +1168,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%050f %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%050f %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
@@ -1658,7 +1647,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%F %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%F %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 1)
|
||||
@@ -1997,7 +1986,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%e %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%e %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -2108,7 +2097,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%050e %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%050e %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
@@ -2699,7 +2688,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%g %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%g %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -2803,7 +2792,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
size_t length;
|
||||
char *result =
|
||||
my_asnprintf (NULL, &length, "%050g %d", NaN (), 33, 44, 55);
|
||||
my_asnprintf (NULL, &length, "%050g %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
@@ -40,18 +41,6 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
#ifdef __DECC
|
||||
static double
|
||||
NaN ()
|
||||
{
|
||||
static double zero = 0.0;
|
||||
return zero / zero;
|
||||
}
|
||||
#else
|
||||
# define NaN() (0.0 / 0.0)
|
||||
#endif
|
||||
|
||||
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
|
||||
static int
|
||||
have_minus_zero ()
|
||||
@@ -238,7 +227,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%a %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%a %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -471,7 +460,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%050a %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%050a %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
/* "0000000nan 33" is not a valid result; see
|
||||
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
||||
@@ -1067,7 +1056,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%f %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%f %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -1160,7 +1149,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%050f %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%050f %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
@@ -1639,7 +1628,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%F %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%F %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 1)
|
||||
@@ -1978,7 +1967,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%e %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%e %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -2089,7 +2078,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%050e %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%050e %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
@@ -2680,7 +2669,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%g %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%g %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) >= 3 + 3
|
||||
&& strisnan (result, 0, strlen (result) - 3, 0)
|
||||
@@ -2784,7 +2773,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
|
||||
{ /* FLAG_ZERO with NaN. */
|
||||
char *result;
|
||||
int retval =
|
||||
my_asprintf (&result, "%050g %d", NaN (), 33, 44, 55);
|
||||
my_asprintf (&result, "%050g %d", NAN, 33, 44, 55);
|
||||
ASSERT (result != NULL);
|
||||
ASSERT (strlen (result) == 50 + 3
|
||||
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
|
||||
|
Reference in New Issue
Block a user