mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2026-10-24 00:48:56 +03:00
This is in response to the GCC developers; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120993>. * lib/float.c (gl_LDBL_MAX): Remove the implementation for PowerPC, as it should no longer be needed. * lib/float.in.h (LDBL_MIN_EXP, LDBL_MIN_10_EXP, LDBL_MIN) (LDBL_MAX, LDBL_EPSILON, LDBL_NORM_MAX): On PowerPC with IBM long double, simplify by using the GCC 15 values unconditionally. These are the correct values according to the GCC developers and there seems little point to disagreeing with current GCC about obsolescent arithmetic that is so problematic in practice. * tests/test-float-h.c (test_long_double): Relax tests of LDBL_MAX when !LDBL_IS_IEC_60559, as the tests would now fail on PowerPC and they were not portable in that case anyway.
64 lines
2.5 KiB
Plaintext
64 lines
2.5 KiB
Plaintext
@node float.h
|
|
@section @file{float.h}
|
|
|
|
POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/float.h.html}
|
|
|
|
Gnulib module: float-h
|
|
@mindex float-h
|
|
|
|
Portability problems fixed by Gnulib:
|
|
@itemize
|
|
@item
|
|
The conversion from @code{int} to @code{long double} in incorrect on some
|
|
platforms:
|
|
glibc 2.7 on Linux/SPARC64.
|
|
@item
|
|
The values of @code{LDBL_*} macros are incorrect on some platforms:
|
|
On OpenBSD 4.0 and MirBSD 10, they are the same as the values of the
|
|
@code{DBL_*} macros, although @samp{long double} is a larger type than
|
|
@samp{double}.
|
|
On FreeBSD/x86 6.4, they represent the incorrect 53-bit precision assumptions
|
|
in the compiler, not the real 64-bit precision at runtime.
|
|
On PowerPC with gcc 8.3 and the default @option{-mabi=ibmlongdouble},
|
|
they don't reflect the ``double double'' representation of @code{long double}
|
|
correctly; the non-IEEE representation is tricky, as it is a pair of
|
|
IEEE @code{double} values such that adding the two elements and
|
|
rounding to even yields the high element of the pair, and arithmetic
|
|
overflow has undefined behavior instead of reliably yielding infinity.
|
|
@item
|
|
The macros
|
|
@code{FLT_HAS_SUBNORM}, @code{FLT_DECIMAL_DIG}, @code{FLT_TRUE_MIN},
|
|
@code{DBL_HAS_SUBNORM}, @code{DBL_DECIMAL_DIG}, @code{DBL_TRUE_MIN},
|
|
@code{LDBL_HAS_SUBNORM}, @code{LDBL_DECIMAL_DIG}, @code{LDBL_TRUE_MIN},
|
|
that were added in ISO C 11, are missing on some platforms:
|
|
gcc 4.5.4, clang 7, Solaris 11.3 with Sun C.
|
|
@item
|
|
The macro @code{LDBL_DECIMAL_DIG} is missing on some platforms:
|
|
MSVC 14.
|
|
@item
|
|
The value of macro @code{FLT_TRUE_MIN} is not a @code{float} on some platforms:
|
|
AIX 7.1 with xlc.
|
|
@item
|
|
The macros
|
|
@code{FLT_IS_IEC_60559}, @code{FLT_NORM_MAX}, @code{FLT_SNAN},
|
|
@code{DBL_IS_IEC_60559}, @code{DBL_NORM_MAX}, @code{DBL_SNAN},
|
|
@code{LDBL_IS_IEC_60559}, @code{LDBL_NORM_MAX}, @code{LDBL_SNAN},
|
|
that were added in ISO C 23, are missing on some platforms:
|
|
gcc 14 without @code{-std=c23} or @code{-std=gnu23}, clang 18, musl libc 1.2.5, AIX 7.3 with xlclang, Solaris 11.3 with Sun C, MSVC 14.
|
|
@end itemize
|
|
|
|
Portability problems not fixed by Gnulib:
|
|
@itemize
|
|
@item
|
|
The macro @code{FLT_ROUNDS} is a constant expression and does not represent
|
|
the current rounding mode on some platforms:
|
|
glibc 2.11, HP-UX 11, mingw.
|
|
@item
|
|
The value of @code{FLT_TRUE_MIN} is not a constant on some platforms:
|
|
FreeBSD/x86.
|
|
@item
|
|
The values of @code{FLT_SNAN}, @code{DBL_SNAN}, @code{LDBL_SNAN} are not
|
|
constants on some platforms:
|
|
AIX 7.3 with xlclang, and all platforms which use the gnulib replacements.
|
|
@end itemize
|