da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset prototyped
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinset nooptimize
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinhdr float,limits,math,values
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinlib fpclassify,frexp,frexpl,ldexp,ldexpl,finite,finitel,isinf,isinfl,isnan,isnanl,signbit,copysign,copysignl FEATURE/isoc99 math.h -lm
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst ast_no_um2fm note{ no unsigned intmax => floatmax cast }end nolink{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_t f = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_intmax_t i = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return f == i;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst ast_mpy_overflow_fpe note{ fpe on mpy overflow }end noexecute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin p = f = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f != p && ++i < 1024);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst ast_div_underflow_fpe note{ fpe on div underflow }end noexecute{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin p = f = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f != p && ++i < 1024);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_float
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_limits
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_math
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_values
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(FLT_MIN_EXP) && defined(FMINEXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define FLT_MIN_EXP FMINEXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(FLT_MIN) && defined(MINFLOAT)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define FLT_MIN MINFLOAT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(FLT_MAX_EXP) && defined(FMAXEXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define FLT_MAX_EXP FMAXEXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(FLT_MAX) && defined(MAXFLOAT)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define FLT_MAX MAXFLOAT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(DBL_MIN_EXP) && defined(DMINEXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define DBL_MIN_EXP DMINEXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(DBL_MIN) && defined(MINDOUBLE)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define DBL_MIN MINDOUBLE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(DBL_MAX_EXP) && defined(DMAXEXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define DBL_MAX_EXP DMAXEXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(DBL_MAX) && defined(MAXDOUBLE)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define DBL_MAX MAXDOUBLE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#include <ast_common.h>">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_float
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#include <float.h>">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_math
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#include <math.h>">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_DIG">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_DIG">> FLT_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_MAX">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_MAX">> FLT_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_MAX_10_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_MAX_10_EXP">> FLT_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_MAX_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_MAX_EXP">> FLT_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_MIN">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_MIN">> FLT_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_MIN_10_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_MIN_10_EXP">> FLT_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef FLT_MIN_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define FLT_MIN_EXP">> FLT_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_DIG">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_DIG">> DBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_MAX">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_MAX">> DBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_MAX_10_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_MAX_10_EXP">> DBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_MAX_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_MAX_EXP">> DBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_MIN">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_MIN">> DBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_MIN_10_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_MIN_10_EXP">> DBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef DBL_MIN_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define DBL_MIN_EXP">> DBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_DIG">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_DIG">> LDBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_MAX">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_MAX">> LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_MAX_10_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_MAX_10_EXP">> LDBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_MAX_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_MAX_EXP">> LDBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_MIN">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_MIN">> LDBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_MIN_10_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_MIN_10_EXP">> LDBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#ifndef LDBL_MIN_EXP">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#define LDBL_MIN_EXP">> LDBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin <<"#endif">>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst - note{ missing floating point limits }end output{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_float
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_limits
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_math
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_values
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef SIGFPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static int caught = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static void catch(int sig)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static void catch(sig) int sig;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(sig, SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int i;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin double pd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin double md;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _ast_fltmax_double
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* fs = "";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* ds = "";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_t l;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_t pl;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_t ml;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* fs = "F";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* ds = "";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* ls = "L";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long u;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_intmax_t w;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_intmax_t pw;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_intmax_t x;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short us;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned int ui;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long ul;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_intmax_t uq;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef SIGFPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGFPE, catch);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (us /= 10)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define USHRT_DIG %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (ui /= 10)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define UINT_DIG %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (ul /= 10)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define ULONG_DIG %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(uq) > sizeof(ul))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (uq /= 10)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define ULLONG_DIG %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define UINTMAX_DIG ULLONG_DIG\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define UINTMAX_DIG ULONG_DIG\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = (_ast_intmax_t)w;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin x = (_ast_intmax_t)f;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (w > pw && w == x);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin w = (pw - 1) + pw;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (u > w)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_ULONG_MAX %lu.0F\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_ULLONG_MAX %llu.0F\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_UINTMAX_MAX FLT_ULLONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_ULLONG_MAX FLT_ULONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_UINTMAX_MAX FLT_ULONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_LONG_MAX %lu.0F\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_LLONG_MAX %llu.0F\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_INTMAX_MAX FLT_LLONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_LLONG_MAX FLT_LONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_INTMAX_MAX FLT_LONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_LONG_MIN (-%lu.0F)\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_LLONG_MIN (-%llu.0F)\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_INTMAX_MIN FLT_LLONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_LLONG_MIN FLT_LONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_INTMAX_MIN FLT_LONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = FLT_DIG;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = pf = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f *= 10.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f != (f + pf));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(FLT_MIN) && defined(FLT_MIN_EXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MIN_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin mf = FLT_MIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = pf = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f < pf);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MIN_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin mf = FLT_MIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_DIG\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_DIG %d\n", s);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_MIN %.*E%s\n", s + 1, mf, fs);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_MIN_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_MIN_EXP (%d)\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(FLT_MAX) && defined(FLT_MAX_EXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = FLT_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = pf = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f > pf);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = FLT_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (mf == (mf + f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = (mf - f) * 2.0 + f;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_MAX %.*E%s\n", s + 1, f, fs);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_MAX_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_MAX_EXP %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MIN_10_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f /= 10.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f < pf);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_MIN_10_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_MIN_10_EXP (%d)\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = FLT_MAX_10_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f *= 10.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (f > pf);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef FLT_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef FLT_MAX_10_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLT_MAX_10_EXP %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = (_ast_intmax_t)w;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin x = (_ast_intmax_t)d;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (w > pw && w == x);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin w = (pw - 1) + pw;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (u > w)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_ULONG_MAX %lu.0\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_ULLONG_MAX %llu.0\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_UINTMAX_MAX DBL_ULLONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_ULLONG_MAX DBL_ULONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_UINTMAX_MAX DBL_ULONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_LONG_MAX %lu.0\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_LLONG_MAX %llu.0\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_INTMAX_MAX DBL_LLONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_LLONG_MAX DBL_LONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_INTMAX_MAX DBL_LONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_LONG_MIN (-%lu.0)\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_LLONG_MIN (-%llu.0)\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_INTMAX_MIN DBL_LLONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_LLONG_MIN DBL_LONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_INTMAX_MIN DBL_LONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = DBL_DIG;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = pd = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d *= 10.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (d != (d + pd));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(DBL_MIN) && defined(DBL_MIN_EXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = DBL_MIN_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin md = DBL_MIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = pd = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (d < pd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = DBL_MIN_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin md = DBL_MIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_DIG\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_DIG %d\n", s);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_MIN %.*E%s\n", s + 1, md, ds);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_MIN_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_MIN_EXP (%d)\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(DBL_MAX) && defined(DBL_MAX_EXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = DBL_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = DBL_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = pd = 1.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (d > pd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (md == (md + d));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = (md - d) * 2.0 + d;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = DBL_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d = DBL_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_MAX %.*E%s\n", s + 1, d, ds);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_MAX_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_MAX_EXP %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = DBL_MIN_10_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d /= 10.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (d < pd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_MIN_10_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_MIN_10_EXP (%d)\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = DBL_MAX_10_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin d *= 10.0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (d > pd);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef DBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef DBL_MAX_10_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DBL_MAX_10_EXP %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !_ast_fltmax_double
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = (_ast_intmax_t)w;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin x = (_ast_intmax_t)l;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (w > pw && w == x);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin w = (pw - 1) + pw;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (u > w)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_ULONG_MAX %lu.0L\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_ULLONG_MAX %llu.0L\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_UINTMAX_MAX LDBL_ULLONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_ULLONG_MAX LDBL_ULONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_UINTMAX_MAX LDBL_ULONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_LONG_MAX %lu.0L\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_LLONG_MAX %llu.0L\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_INTMAX_MAX LDBL_LLONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_LLONG_MAX LDBL_LONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_INTMAX_MAX LDBL_LONG_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_LONG_MIN (-%lu.0L)\n", u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(w) > sizeof(u))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_LLONG_MIN (-%llu.0L)\n", w);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_INTMAX_MIN LDBL_LLONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_LLONG_MIN LDBL_LONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_INTMAX_MIN LDBL_LONG_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = LDBL_DIG;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = pl = 1.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l *= 10.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (l != (l + pl));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(LDBL_MIN) && defined(LDBL_MIN_EXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = LDBL_MIN_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ml = LDBL_MIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = pl = 1.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l /= 2.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (l < pl);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = LDBL_MIN_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ml = LDBL_MIN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_DIG
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_DIG\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_DIG %d\n", s);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_MIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_MIN\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_MIN %.*LE%s\n", s + 1, ml, ls);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_MIN_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_MIN_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_MIN_EXP (%d)\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(LDBL_MAX) && defined(LDBL_MAX_EXP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = LDBL_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = LDBL_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = pl = 1.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l *= 2.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (l > pl);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l *= 2.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (ml == (ml + l));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = (ml - l) * 2.0L + l;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = LDBL_MAX_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l = LDBL_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_MAX\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_MAX %.*LE%s\n", s + 1, l, ls);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_MAX_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_MAX_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_MAX_EXP %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = LDBL_MIN_10_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l /= 10.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (l < pl);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_MIN_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_MIN_10_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_MIN_10_EXP (%d)\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i = LDBL_MAX_10_EXP;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin l *= 10.0L;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (l > pl);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef LDBL_MAX_10_EXP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifndef LDBL_MAX_10_EXP\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define LDBL_MAX_10_EXP %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fp = "LDBL";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fp = "DBL";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLTMAX_UINTMAX_MAX %s_UINTMAX_MAX\n", fp);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLTMAX_INTMAX_MAX %s_INTMAX_MAX\n", fp);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define FLTMAX_INTMAX_MIN %s_INTMAX_MIN\n", fp);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef SIGFPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!caught)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !__MVS__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin caught = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (caught)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n#define _ast_fltsig %d\n", SIGFPE);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !_lib_frexp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern double frexp(double, int*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !_lib_frexpl
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern _ast_fltmax_t frexpl(_ast_fltmax_t, int*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !_lib_ldexp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern double ldexp(double, int);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !_lib_ldexpl
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern _ast_fltmax_t ldexpl(_ast_fltmax_t, int);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst - note{ double exponent bitfoolery }end output{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef union _dbl_exp_u
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_int4_t e[sizeof(double) / 4];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } _ast_dbl_exp_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_int4_t e;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_dbl_exp_t a;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_dbl_exp_t b;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("typedef union _ast_dbl_exp_u\n{\n\tuint32_t\t\te[sizeof(double)/4];\n\tdouble\t\t\tf;\n} _ast_dbl_exp_t;\n\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_dbl_exp_index %d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (i = 0; !(e & 1); e >>= 1, i++);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_dbl_exp_shift %d\n\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst - note{ long double exponent bitfoolery }end output{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef union _ast_fltmax_exp_u
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_int4_t e[sizeof(_ast_fltmax_t) / 4];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_t f;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } _ast_fltmax_exp_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned _ast_int4_t e;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_exp_t a;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _ast_fltmax_exp_t b;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("typedef union _fltmax_exp_u\n{\n\tuint32_t\t\te[sizeof(_ast_fltmax_t)/4];\n\t_ast_fltmax_t\t\tf;\n} _ast_fltmax_exp_t;\n\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_fltmax_exp_index\t%d\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (i = 0; !(e & 1); e >>= 1, i++);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_fltmax_exp_shift\t%d\n\n", i);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst - -DN=1 - -DN=2 note{ _ast_fltmax_t maximum integral type }end output{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if N == 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long long m;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long double f = 123.456;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!m || f == m)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_flt_unsigned_max_t unsigned long long\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_flt_unsigned_max_t unsigned long\n");
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztst - -DSCAN=1 - -lm -DSTRTO=1 - -DMAC=1 - -DDIV=1 - -DEXP=1 - -DADD=1 - -DMPY=1 note{ INF and NAN memory representations }end output{
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz #define _AIX_COMPATIBILITY 1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz #define _FP_MODE_VARIABLE 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_float
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_limits
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_math
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_values
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if STRTO && _hdr_stdlib
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(FLT_MAX) && defined(MAXFLOAT)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define FLT_MAX MAXFLOAT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !defined(DBL_MAX) && defined(MAXDOUBLE)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define DBL_MAX MAXDOUBLE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _ast_fltmax_double
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static void
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list(const char* typ, const char* var, void* val, int siz)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list(typ, var, val, siz)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* typ;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* var;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void* val;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register unsigned char* u = (unsigned char*)val;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register unsigned char* e = u + siz;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _ast_%s_%s_init\t0x%02x", typ, var, *u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (++u < e)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(",0x%02x", *u);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if SCAN || STRTO
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef NAN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define NAN "NaN"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef INF
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define INF "INF"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sscanf(NAN, "%g", &f) != 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = atof(NAN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("flt", "nan", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sscanf(INF, "%g", &f) != 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = atof(INF);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("flt", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sscanf(NAN, "%lg", &f) != 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = strtod(NAN, &e);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("dbl", "nan", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sscanf(INF, "%lg", &f) != 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = strtod(INF, &e);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("dbl", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long double f;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sscanf(NAN, "%Lg", &f) != 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = strtold(NAN, &e);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("ldbl", "nan", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sscanf(INF, "%Lg", &f) != 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = strtold(INF, &e);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("ldbl", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef SIGFPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin signal(SIGFPE, SIG_IGN);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef FLT_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin float f = FLT_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin float z = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = 0.0 / z;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("flt", "nan", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = 1.0 / z;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("flt", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = exp(f);
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz f = FLT_QNAN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("flt", "nan", &f, sizeof(f));
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz f = FLT_INFINITY;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("flt", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef DBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin double f = DBL_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin double z = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = 0.0 / z;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("dbl", "nan", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = 1.0 / z;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("dbl", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = exp(f);
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz f = DBL_QNAN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("dbl", "nan", &f, sizeof(f));
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz f = DBL_INFINITY;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("dbl", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifdef LDBL_MAX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long double f = LDBL_MAX;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin long double z = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = 0.0 / z;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("ldbl", "nan", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = 1.0 / z;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("ldbl", "inf", &f, sizeof(f));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin f = exp(f);
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz f = LDBL_QNAN;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("ldbl", "nan", &f, sizeof(f));
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz f = LDBL_INFINITY;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list("ldbl", "inf", &f, sizeof(f));