1*4887Schinset prototyped 2*4887Schinhdr float,limits,math,values 3*4887Schinlib fpclassify,frexp,frexpl,ldexp,ldexpl,finite,finitel,isinf,isinfl,isnan,isnanl,signbit,copysign,copysignl <math.h> -lm 4*4887Schin 5*4887Schintst ast_no_um2fm note{ no unsigned intmax => floatmax cast }end nolink{ 6*4887Schin #include "FEATURE/common" 7*4887Schin int 8*4887Schin main() 9*4887Schin { 10*4887Schin _ast_fltmax_t f = 0; 11*4887Schin unsigned _ast_intmax_t i = 0; 12*4887Schin f = i; 13*4887Schin i = f; 14*4887Schin return f == i; 15*4887Schin } 16*4887Schin}end 17*4887Schin 18*4887Schintst ast_mpy_overflow_fpe note{ fpe on mpy overflow }end noexecute{ 19*4887Schin int 20*4887Schin main() 21*4887Schin { 22*4887Schin float f; 23*4887Schin float p; 24*4887Schin int i; 25*4887Schin 26*4887Schin i = 0; 27*4887Schin p = f = 1.0; 28*4887Schin do 29*4887Schin { 30*4887Schin p = f; 31*4887Schin f *= 2.0; 32*4887Schin } while (f != p && ++i < 1024); 33*4887Schin return 0; 34*4887Schin } 35*4887Schin}end 36*4887Schin 37*4887Schintst ast_div_underflow_fpe note{ fpe on div underflow }end noexecute{ 38*4887Schin int 39*4887Schin main() 40*4887Schin { 41*4887Schin float f; 42*4887Schin float p; 43*4887Schin int i; 44*4887Schin 45*4887Schin i = 0; 46*4887Schin p = f = 1.0; 47*4887Schin do 48*4887Schin { 49*4887Schin p = f; 50*4887Schin f /= 2.0; 51*4887Schin } while (f != p && ++i < 1024); 52*4887Schin return 0; 53*4887Schin } 54*4887Schin}end 55*4887Schin 56*4887Schinmacro{ 57*4887Schin #if _hdr_float 58*4887Schin #include <float.h> 59*4887Schin #endif 60*4887Schin #if _hdr_limits 61*4887Schin #include <limits.h> 62*4887Schin #endif 63*4887Schin #if _hdr_math 64*4887Schin #include <math.h> 65*4887Schin #endif 66*4887Schin #if _hdr_values 67*4887Schin #include <values.h> 68*4887Schin #endif 69*4887Schin 70*4887Schin #if !defined(FLT_MIN_EXP) && defined(FMINEXP) 71*4887Schin #define FLT_MIN_EXP FMINEXP 72*4887Schin #endif 73*4887Schin #if !defined(FLT_MIN) && defined(MINFLOAT) 74*4887Schin #define FLT_MIN MINFLOAT 75*4887Schin #endif 76*4887Schin #if !defined(FLT_MAX_EXP) && defined(FMAXEXP) 77*4887Schin #define FLT_MAX_EXP FMAXEXP 78*4887Schin #endif 79*4887Schin #if !defined(FLT_MAX) && defined(MAXFLOAT) 80*4887Schin #define FLT_MAX MAXFLOAT 81*4887Schin #endif 82*4887Schin 83*4887Schin #if !defined(DBL_MIN_EXP) && defined(DMINEXP) 84*4887Schin #define DBL_MIN_EXP DMINEXP 85*4887Schin #endif 86*4887Schin #if !defined(DBL_MIN) && defined(MINDOUBLE) 87*4887Schin #define DBL_MIN MINDOUBLE 88*4887Schin #endif 89*4887Schin #if !defined(DBL_MAX_EXP) && defined(DMAXEXP) 90*4887Schin #define DBL_MAX_EXP DMAXEXP 91*4887Schin #endif 92*4887Schin #if !defined(DBL_MAX) && defined(MAXDOUBLE) 93*4887Schin #define DBL_MAX MAXDOUBLE 94*4887Schin #endif 95*4887Schin 96*4887Schin <<"#include <ast_common.h>">> 97*4887Schin #if _hdr_float 98*4887Schin <<"#include <float.h>">> 99*4887Schin #endif 100*4887Schin #if _hdr_math 101*4887Schin <<"#include <math.h>">> 102*4887Schin #endif 103*4887Schin #ifdef FLT_DIG 104*4887Schin <<"#ifndef FLT_DIG">> 105*4887Schin <<"#define FLT_DIG">> FLT_DIG 106*4887Schin <<"#endif">> 107*4887Schin #endif 108*4887Schin #ifdef FLT_MAX 109*4887Schin <<"#ifndef FLT_MAX">> 110*4887Schin <<"#define FLT_MAX">> FLT_MAX 111*4887Schin <<"#endif">> 112*4887Schin #endif 113*4887Schin #ifdef FLT_MAX_10_EXP 114*4887Schin <<"#ifndef FLT_MAX_10_EXP">> 115*4887Schin <<"#define FLT_MAX_10_EXP">> FLT_MAX_10_EXP 116*4887Schin <<"#endif">> 117*4887Schin #endif 118*4887Schin #ifdef FLT_MAX_EXP 119*4887Schin <<"#ifndef FLT_MAX_EXP">> 120*4887Schin <<"#define FLT_MAX_EXP">> FLT_MAX_EXP 121*4887Schin <<"#endif">> 122*4887Schin #endif 123*4887Schin #ifdef FLT_MIN 124*4887Schin <<"#ifndef FLT_MIN">> 125*4887Schin <<"#define FLT_MIN">> FLT_MIN 126*4887Schin <<"#endif">> 127*4887Schin #endif 128*4887Schin #ifdef FLT_MIN_10_EXP 129*4887Schin <<"#ifndef FLT_MIN_10_EXP">> 130*4887Schin <<"#define FLT_MIN_10_EXP">> FLT_MIN_10_EXP 131*4887Schin <<"#endif">> 132*4887Schin #endif 133*4887Schin #ifdef FLT_MIN_EXP 134*4887Schin <<"#ifndef FLT_MIN_EXP">> 135*4887Schin <<"#define FLT_MIN_EXP">> FLT_MIN_EXP 136*4887Schin <<"#endif">> 137*4887Schin #endif 138*4887Schin 139*4887Schin #ifdef DBL_DIG 140*4887Schin <<"#ifndef DBL_DIG">> 141*4887Schin <<"#define DBL_DIG">> DBL_DIG 142*4887Schin <<"#endif">> 143*4887Schin #endif 144*4887Schin #ifdef DBL_MAX 145*4887Schin <<"#ifndef DBL_MAX">> 146*4887Schin <<"#define DBL_MAX">> DBL_MAX 147*4887Schin <<"#endif">> 148*4887Schin #endif 149*4887Schin #ifdef DBL_MAX_10_EXP 150*4887Schin <<"#ifndef DBL_MAX_10_EXP">> 151*4887Schin <<"#define DBL_MAX_10_EXP">> DBL_MAX_10_EXP 152*4887Schin <<"#endif">> 153*4887Schin #endif 154*4887Schin #ifdef DBL_MAX_EXP 155*4887Schin <<"#ifndef DBL_MAX_EXP">> 156*4887Schin <<"#define DBL_MAX_EXP">> DBL_MAX_EXP 157*4887Schin <<"#endif">> 158*4887Schin #endif 159*4887Schin #ifdef DBL_MIN 160*4887Schin <<"#ifndef DBL_MIN">> 161*4887Schin <<"#define DBL_MIN">> DBL_MIN 162*4887Schin <<"#endif">> 163*4887Schin #endif 164*4887Schin #ifdef DBL_MIN_10_EXP 165*4887Schin <<"#ifndef DBL_MIN_10_EXP">> 166*4887Schin <<"#define DBL_MIN_10_EXP">> DBL_MIN_10_EXP 167*4887Schin <<"#endif">> 168*4887Schin #endif 169*4887Schin #ifdef DBL_MIN_EXP 170*4887Schin <<"#ifndef DBL_MIN_EXP">> 171*4887Schin <<"#define DBL_MIN_EXP">> DBL_MIN_EXP 172*4887Schin <<"#endif">> 173*4887Schin #endif 174*4887Schin 175*4887Schin #ifdef LDBL_DIG 176*4887Schin <<"#ifndef LDBL_DIG">> 177*4887Schin <<"#define LDBL_DIG">> LDBL_DIG 178*4887Schin <<"#endif">> 179*4887Schin #endif 180*4887Schin #ifdef LDBL_MAX 181*4887Schin <<"#ifndef LDBL_MAX">> 182*4887Schin <<"#define LDBL_MAX">> LDBL_MAX 183*4887Schin <<"#endif">> 184*4887Schin #endif 185*4887Schin #ifdef LDBL_MAX_10_EXP 186*4887Schin <<"#ifndef LDBL_MAX_10_EXP">> 187*4887Schin <<"#define LDBL_MAX_10_EXP">> LDBL_MAX_10_EXP 188*4887Schin <<"#endif">> 189*4887Schin #endif 190*4887Schin #ifdef LDBL_MAX_EXP 191*4887Schin <<"#ifndef LDBL_MAX_EXP">> 192*4887Schin <<"#define LDBL_MAX_EXP">> LDBL_MAX_EXP 193*4887Schin <<"#endif">> 194*4887Schin #endif 195*4887Schin #ifdef LDBL_MIN 196*4887Schin <<"#ifndef LDBL_MIN">> 197*4887Schin <<"#define LDBL_MIN">> LDBL_MIN 198*4887Schin <<"#endif">> 199*4887Schin #endif 200*4887Schin #ifdef LDBL_MIN_10_EXP 201*4887Schin <<"#ifndef LDBL_MIN_10_EXP">> 202*4887Schin <<"#define LDBL_MIN_10_EXP">> LDBL_MIN_10_EXP 203*4887Schin <<"#endif">> 204*4887Schin #endif 205*4887Schin #ifdef LDBL_MIN_EXP 206*4887Schin <<"#ifndef LDBL_MIN_EXP">> 207*4887Schin <<"#define LDBL_MIN_EXP">> LDBL_MIN_EXP 208*4887Schin <<"#endif">> 209*4887Schin #endif 210*4887Schin}end 211*4887Schin 212*4887Schintst - note{ missing floating point limits }end output{ 213*4887Schin #include "FEATURE/common" 214*4887Schin #if _hdr_float 215*4887Schin #include <float.h> 216*4887Schin #endif 217*4887Schin #if _hdr_limits 218*4887Schin #include <limits.h> 219*4887Schin #endif 220*4887Schin #if _hdr_math 221*4887Schin #include <math.h> 222*4887Schin #endif 223*4887Schin #if _hdr_values 224*4887Schin #include <values.h> 225*4887Schin #endif 226*4887Schin #include <signal.h> 227*4887Schin #ifdef SIGFPE 228*4887Schin static int caught = 0; 229*4887Schin #if _STD_ 230*4887Schin static void catch(int sig) 231*4887Schin #else 232*4887Schin static void catch(sig) int sig; 233*4887Schin #endif 234*4887Schin { 235*4887Schin signal(sig, SIG_IGN); 236*4887Schin caught++; 237*4887Schin } 238*4887Schin #endif 239*4887Schin int 240*4887Schin main() 241*4887Schin { 242*4887Schin register int i; 243*4887Schin register int s; 244*4887Schin float f; 245*4887Schin float pf; 246*4887Schin float mf; 247*4887Schin float xf; 248*4887Schin double d; 249*4887Schin double pd; 250*4887Schin double md; 251*4887Schin char* fp; 252*4887Schin #if _ast_fltmax_double 253*4887Schin char* fs = ""; 254*4887Schin char* ds = ""; 255*4887Schin #else 256*4887Schin _ast_fltmax_t l; 257*4887Schin _ast_fltmax_t pl; 258*4887Schin _ast_fltmax_t ml; 259*4887Schin char* fs = "F"; 260*4887Schin char* ds = ""; 261*4887Schin char* ls = "L"; 262*4887Schin #endif 263*4887Schin unsigned long u; 264*4887Schin unsigned _ast_intmax_t w; 265*4887Schin unsigned _ast_intmax_t pw; 266*4887Schin unsigned _ast_intmax_t x; 267*4887Schin unsigned short us; 268*4887Schin unsigned int ui; 269*4887Schin unsigned long ul; 270*4887Schin unsigned _ast_intmax_t uq; 271*4887Schin 272*4887Schin #ifdef SIGFPE 273*4887Schin signal(SIGFPE, catch); 274*4887Schin #endif 275*4887Schin printf("\n"); 276*4887Schin printf("\n"); 277*4887Schin us = 0; 278*4887Schin us = ~us; 279*4887Schin i = 0; 280*4887Schin while (us /= 10) 281*4887Schin i++; 282*4887Schin printf("#define USHRT_DIG %d\n", i); 283*4887Schin ui = 0; 284*4887Schin ui = ~ui; 285*4887Schin i = 0; 286*4887Schin while (ui /= 10) 287*4887Schin i++; 288*4887Schin printf("#define UINT_DIG %d\n", i); 289*4887Schin ul = 0; 290*4887Schin ul = ~ul; 291*4887Schin i = 0; 292*4887Schin while (ul /= 10) 293*4887Schin i++; 294*4887Schin printf("#define ULONG_DIG %d\n", i); 295*4887Schin if (sizeof(uq) > sizeof(ul)) 296*4887Schin { 297*4887Schin uq = 0; 298*4887Schin uq = ~uq; 299*4887Schin i = 0; 300*4887Schin while (uq /= 10) 301*4887Schin i++; 302*4887Schin printf("#define ULLONG_DIG %d\n", i); 303*4887Schin printf("#define UINTMAX_DIG ULLONG_DIG\n"); 304*4887Schin } 305*4887Schin else 306*4887Schin printf("#define UINTMAX_DIG ULONG_DIG\n"); 307*4887Schin printf("\n"); 308*4887Schin w = 1; 309*4887Schin do 310*4887Schin { 311*4887Schin pw = w; 312*4887Schin w *= 2; 313*4887Schin f = (_ast_intmax_t)w; 314*4887Schin x = (_ast_intmax_t)f; 315*4887Schin } while (w > pw && w == x); 316*4887Schin w = (pw - 1) + pw; 317*4887Schin u = ~0; 318*4887Schin if (u > w) 319*4887Schin u = w; 320*4887Schin printf("#define FLT_ULONG_MAX %lu.0F\n", u); 321*4887Schin if (sizeof(w) > sizeof(u)) 322*4887Schin { 323*4887Schin printf("#define FLT_ULLONG_MAX %llu.0F\n", w); 324*4887Schin printf("#define FLT_UINTMAX_MAX FLT_ULLONG_MAX\n"); 325*4887Schin } 326*4887Schin else 327*4887Schin { 328*4887Schin printf("#define FLT_ULLONG_MAX FLT_ULONG_MAX\n"); 329*4887Schin printf("#define FLT_UINTMAX_MAX FLT_ULONG_MAX\n"); 330*4887Schin } 331*4887Schin u /= 2; 332*4887Schin w /= 2; 333*4887Schin printf("#define FLT_LONG_MAX %lu.0F\n", u); 334*4887Schin if (sizeof(w) > sizeof(u)) 335*4887Schin { 336*4887Schin printf("#define FLT_LLONG_MAX %llu.0F\n", w); 337*4887Schin printf("#define FLT_INTMAX_MAX FLT_LLONG_MAX\n"); 338*4887Schin } 339*4887Schin else 340*4887Schin { 341*4887Schin printf("#define FLT_LLONG_MAX FLT_LONG_MAX\n"); 342*4887Schin printf("#define FLT_INTMAX_MAX FLT_LONG_MAX\n"); 343*4887Schin } 344*4887Schin u++; 345*4887Schin w++; 346*4887Schin printf("#define FLT_LONG_MIN (-%lu.0F)\n", u); 347*4887Schin if (sizeof(w) > sizeof(u)) 348*4887Schin { 349*4887Schin printf("#define FLT_LLONG_MIN (-%llu.0F)\n", w); 350*4887Schin printf("#define FLT_INTMAX_MIN FLT_LLONG_MIN\n"); 351*4887Schin } 352*4887Schin else 353*4887Schin { 354*4887Schin printf("#define FLT_LLONG_MIN FLT_LONG_MIN\n"); 355*4887Schin printf("#define FLT_INTMAX_MIN FLT_LONG_MIN\n"); 356*4887Schin } 357*4887Schin #ifdef FLT_DIG 358*4887Schin s = FLT_DIG; 359*4887Schin #else 360*4887Schin f = pf = 1.0; 361*4887Schin s = -1; 362*4887Schin do 363*4887Schin { 364*4887Schin s++; 365*4887Schin f *= 10.0; 366*4887Schin } while (f != (f + pf)); 367*4887Schin #endif 368*4887Schin #if defined(FLT_MIN) && defined(FLT_MIN_EXP) 369*4887Schin i = FLT_MIN_EXP; 370*4887Schin mf = FLT_MIN; 371*4887Schin #else 372*4887Schin i = 3; 373*4887Schin f = pf = 1.0; 374*4887Schin do 375*4887Schin { 376*4887Schin i--; 377*4887Schin mf = pf; 378*4887Schin pf = f; 379*4887Schin f /= 2.0; 380*4887Schin } while (f < pf); 381*4887Schin #ifdef FLT_MIN_EXP 382*4887Schin i = FLT_MIN_EXP; 383*4887Schin #endif 384*4887Schin #ifdef FLT_MIN 385*4887Schin mf = FLT_MIN; 386*4887Schin #endif 387*4887Schin #endif 388*4887Schin #ifndef FLT_DIG 389*4887Schin printf("#ifndef FLT_DIG\n"); 390*4887Schin printf("#define FLT_DIG %d\n", s); 391*4887Schin printf("#endif\n"); 392*4887Schin #endif 393*4887Schin #ifndef FLT_MIN 394*4887Schin printf("#ifndef FLT_MIN\n"); 395*4887Schin printf("#define FLT_MIN %.*E%s\n", s + 1, mf, fs); 396*4887Schin printf("#endif\n"); 397*4887Schin #endif 398*4887Schin #ifndef FLT_MIN_EXP 399*4887Schin printf("#ifndef FLT_MIN_EXP\n"); 400*4887Schin printf("#define FLT_MIN_EXP (%d)\n", i); 401*4887Schin printf("#endif\n"); 402*4887Schin #endif 403*4887Schin 404*4887Schin #if defined(FLT_MAX) && defined(FLT_MAX_EXP) 405*4887Schin i = FLT_MAX_EXP; 406*4887Schin f = FLT_MAX; 407*4887Schin #else 408*4887Schin i = -1; 409*4887Schin f = pf = 1.0; 410*4887Schin do 411*4887Schin { 412*4887Schin i++; 413*4887Schin mf = pf; 414*4887Schin pf = f; 415*4887Schin f *= 2.0; 416*4887Schin } while (f > pf); 417*4887Schin #ifdef FLT_MAX_EXP 418*4887Schin i = FLT_MAX_EXP; 419*4887Schin #endif 420*4887Schin #ifdef FLT_MAX 421*4887Schin f = FLT_MAX; 422*4887Schin #endif 423*4887Schin #endif 424*4887Schin #ifdef FLT_MAX_EXP 425*4887Schin i = FLT_MAX_EXP; 426*4887Schin #else 427*4887Schin f = 1; 428*4887Schin do 429*4887Schin { 430*4887Schin f *= 2.0; 431*4887Schin } while (mf == (mf + f)); 432*4887Schin f = (mf - f) * 2.0 + f; 433*4887Schin #endif 434*4887Schin xf = f; 435*4887Schin #ifndef FLT_MAX 436*4887Schin printf("#ifndef FLT_MAX\n"); 437*4887Schin printf("#define FLT_MAX %.*E%s\n", s + 1, f, fs); 438*4887Schin printf("#endif\n"); 439*4887Schin #endif 440*4887Schin #ifndef FLT_MAX_EXP 441*4887Schin printf("#ifndef FLT_MAX_EXP\n"); 442*4887Schin printf("#define FLT_MAX_EXP %d\n", i); 443*4887Schin printf("#endif\n"); 444*4887Schin #endif 445*4887Schin 446*4887Schin #ifdef FLT_MIN_10_EXP 447*4887Schin i = FLT_MIN_10_EXP; 448*4887Schin #else 449*4887Schin i = 2; 450*4887Schin f = 1.0; 451*4887Schin do 452*4887Schin { 453*4887Schin i--; 454*4887Schin pf = f; 455*4887Schin f /= 10.0; 456*4887Schin } while (f < pf); 457*4887Schin #endif 458*4887Schin #ifndef FLT_MIN_10_EXP 459*4887Schin printf("#ifndef FLT_MIN_10_EXP\n"); 460*4887Schin printf("#define FLT_MIN_10_EXP (%d)\n", i); 461*4887Schin printf("#endif\n"); 462*4887Schin #endif 463*4887Schin 464*4887Schin #ifdef FLT_MAX_10_EXP 465*4887Schin i = FLT_MAX_10_EXP; 466*4887Schin #else 467*4887Schin i = -2; 468*4887Schin f = 1.0; 469*4887Schin do 470*4887Schin { 471*4887Schin i++; 472*4887Schin pf = f; 473*4887Schin f *= 10.0; 474*4887Schin } while (f > pf); 475*4887Schin #endif 476*4887Schin #ifndef FLT_MAX_10_EXP 477*4887Schin printf("#ifndef FLT_MAX_10_EXP\n"); 478*4887Schin printf("#define FLT_MAX_10_EXP %d\n", i); 479*4887Schin printf("#endif\n"); 480*4887Schin #endif 481*4887Schin 482*4887Schin printf("\n"); 483*4887Schin w = 1; 484*4887Schin do 485*4887Schin { 486*4887Schin pw = w; 487*4887Schin w *= 2; 488*4887Schin d = (_ast_intmax_t)w; 489*4887Schin x = (_ast_intmax_t)d; 490*4887Schin } while (w > pw && w == x); 491*4887Schin w = (pw - 1) + pw; 492*4887Schin u = ~0; 493*4887Schin if (u > w) 494*4887Schin u = w; 495*4887Schin printf("#define DBL_ULONG_MAX %lu.0\n", u); 496*4887Schin if (sizeof(w) > sizeof(u)) 497*4887Schin { 498*4887Schin printf("#define DBL_ULLONG_MAX %llu.0\n", w); 499*4887Schin printf("#define DBL_UINTMAX_MAX DBL_ULLONG_MAX\n"); 500*4887Schin } 501*4887Schin else 502*4887Schin { 503*4887Schin printf("#define DBL_ULLONG_MAX DBL_ULONG_MAX\n"); 504*4887Schin printf("#define DBL_UINTMAX_MAX DBL_ULONG_MAX\n"); 505*4887Schin } 506*4887Schin u /= 2; 507*4887Schin w /= 2; 508*4887Schin printf("#define DBL_LONG_MAX %lu.0\n", u); 509*4887Schin if (sizeof(w) > sizeof(u)) 510*4887Schin { 511*4887Schin printf("#define DBL_LLONG_MAX %llu.0\n", w); 512*4887Schin printf("#define DBL_INTMAX_MAX DBL_LLONG_MAX\n"); 513*4887Schin } 514*4887Schin else 515*4887Schin { 516*4887Schin printf("#define DBL_LLONG_MAX DBL_LONG_MAX\n"); 517*4887Schin printf("#define DBL_INTMAX_MAX DBL_LONG_MAX\n"); 518*4887Schin } 519*4887Schin u++; 520*4887Schin w++; 521*4887Schin printf("#define DBL_LONG_MIN (-%lu.0)\n", u); 522*4887Schin if (sizeof(w) > sizeof(u)) 523*4887Schin { 524*4887Schin printf("#define DBL_LLONG_MIN (-%llu.0)\n", w); 525*4887Schin printf("#define DBL_INTMAX_MIN DBL_LLONG_MIN\n"); 526*4887Schin } 527*4887Schin else 528*4887Schin { 529*4887Schin printf("#define DBL_LLONG_MIN DBL_LONG_MIN\n"); 530*4887Schin printf("#define DBL_INTMAX_MIN DBL_LONG_MIN\n"); 531*4887Schin } 532*4887Schin #ifdef DBL_DIG 533*4887Schin s = DBL_DIG; 534*4887Schin #else 535*4887Schin d = pd = 1.0; 536*4887Schin s = -1; 537*4887Schin do 538*4887Schin { 539*4887Schin s++; 540*4887Schin d *= 10.0; 541*4887Schin } while (d != (d + pd)); 542*4887Schin #endif 543*4887Schin #if defined(DBL_MIN) && defined(DBL_MIN_EXP) 544*4887Schin i = DBL_MIN_EXP; 545*4887Schin md = DBL_MIN; 546*4887Schin #else 547*4887Schin i = 3; 548*4887Schin d = pd = 1.0; 549*4887Schin do 550*4887Schin { 551*4887Schin i--; 552*4887Schin md = pd; 553*4887Schin pd = d; 554*4887Schin d /= 2.0; 555*4887Schin } while (d < pd); 556*4887Schin #ifdef DBL_MIN_EXP 557*4887Schin i = DBL_MIN_EXP; 558*4887Schin #endif 559*4887Schin #ifdef DBL_MIN 560*4887Schin md = DBL_MIN; 561*4887Schin #endif 562*4887Schin #endif 563*4887Schin #ifndef DBL_DIG 564*4887Schin printf("#ifndef DBL_DIG\n"); 565*4887Schin printf("#define DBL_DIG %d\n", s); 566*4887Schin printf("#endif\n"); 567*4887Schin #endif 568*4887Schin #ifndef DBL_MIN 569*4887Schin printf("#ifndef DBL_MIN\n"); 570*4887Schin printf("#define DBL_MIN %.*E%s\n", s + 1, md, ds); 571*4887Schin printf("#endif\n"); 572*4887Schin #endif 573*4887Schin #ifndef DBL_MIN_EXP 574*4887Schin printf("#ifndef DBL_MIN_EXP\n"); 575*4887Schin printf("#define DBL_MIN_EXP (%d)\n", i); 576*4887Schin printf("#endif\n"); 577*4887Schin #endif 578*4887Schin 579*4887Schin #if defined(DBL_MAX) && defined(DBL_MAX_EXP) 580*4887Schin i = DBL_MAX_EXP; 581*4887Schin d = DBL_MAX; 582*4887Schin #else 583*4887Schin i = -1; 584*4887Schin d = pd = 1.0; 585*4887Schin do 586*4887Schin { 587*4887Schin i++; 588*4887Schin md = pd; 589*4887Schin pd = d; 590*4887Schin d *= 2.0; 591*4887Schin } while (d > pd); 592*4887Schin d = 1.0; 593*4887Schin do 594*4887Schin { 595*4887Schin d *= 2.0; 596*4887Schin } while (md == (md + d)); 597*4887Schin d = (md - d) * 2.0 + d; 598*4887Schin #ifdef DBL_MAX_EXP 599*4887Schin i = DBL_MAX_EXP; 600*4887Schin #endif 601*4887Schin #ifdef DBL_MAX 602*4887Schin d = DBL_MAX; 603*4887Schin #endif 604*4887Schin #endif 605*4887Schin #ifndef DBL_MAX 606*4887Schin printf("#ifndef DBL_MAX\n"); 607*4887Schin printf("#define DBL_MAX %.*E%s\n", s + 1, d, ds); 608*4887Schin printf("#endif\n"); 609*4887Schin #endif 610*4887Schin #ifndef DBL_MAX_EXP 611*4887Schin printf("#ifndef DBL_MAX_EXP\n"); 612*4887Schin printf("#define DBL_MAX_EXP %d\n", i); 613*4887Schin printf("#endif\n"); 614*4887Schin #endif 615*4887Schin 616*4887Schin #ifdef DBL_MIN_10_EXP 617*4887Schin i = DBL_MIN_10_EXP; 618*4887Schin #else 619*4887Schin i = 2; 620*4887Schin d = 1.0; 621*4887Schin do 622*4887Schin { 623*4887Schin i--; 624*4887Schin pd = d; 625*4887Schin d /= 10.0; 626*4887Schin } while (d < pd); 627*4887Schin #endif 628*4887Schin #ifndef DBL_MIN_10_EXP 629*4887Schin printf("#ifndef DBL_MIN_10_EXP\n"); 630*4887Schin printf("#define DBL_MIN_10_EXP (%d)\n", i); 631*4887Schin printf("#endif\n"); 632*4887Schin #endif 633*4887Schin 634*4887Schin #ifdef DBL_MAX_10_EXP 635*4887Schin i = DBL_MAX_10_EXP; 636*4887Schin #else 637*4887Schin i = -2; 638*4887Schin d = 1.0; 639*4887Schin do 640*4887Schin { 641*4887Schin i++; 642*4887Schin pd = d; 643*4887Schin d *= 10.0; 644*4887Schin } while (d > pd); 645*4887Schin #endif 646*4887Schin #ifndef DBL_MAX_10_EXP 647*4887Schin printf("#ifndef DBL_MAX_10_EXP\n"); 648*4887Schin printf("#define DBL_MAX_10_EXP %d\n", i); 649*4887Schin printf("#endif\n"); 650*4887Schin #endif 651*4887Schin 652*4887Schin #if !_ast_fltmax_double 653*4887Schin printf("\n"); 654*4887Schin w = 1; 655*4887Schin do 656*4887Schin { 657*4887Schin pw = w; 658*4887Schin w *= 2; 659*4887Schin l = (_ast_intmax_t)w; 660*4887Schin x = (_ast_intmax_t)l; 661*4887Schin } while (w > pw && w == x); 662*4887Schin w = (pw - 1) + pw; 663*4887Schin u = ~0; 664*4887Schin if (u > w) 665*4887Schin u = w; 666*4887Schin printf("#define LDBL_ULONG_MAX %lu.0L\n", u); 667*4887Schin if (sizeof(w) > sizeof(u)) 668*4887Schin { 669*4887Schin printf("#define LDBL_ULLONG_MAX %llu.0L\n", w); 670*4887Schin printf("#define LDBL_UINTMAX_MAX LDBL_ULLONG_MAX\n"); 671*4887Schin } 672*4887Schin else 673*4887Schin { 674*4887Schin printf("#define LDBL_ULLONG_MAX LDBL_ULONG_MAX\n"); 675*4887Schin printf("#define LDBL_UINTMAX_MAX LDBL_ULONG_MAX\n"); 676*4887Schin } 677*4887Schin u /= 2; 678*4887Schin w /= 2; 679*4887Schin printf("#define LDBL_LONG_MAX %lu.0L\n", u); 680*4887Schin if (sizeof(w) > sizeof(u)) 681*4887Schin { 682*4887Schin printf("#define LDBL_LLONG_MAX %llu.0L\n", w); 683*4887Schin printf("#define LDBL_INTMAX_MAX LDBL_LLONG_MAX\n"); 684*4887Schin } 685*4887Schin else 686*4887Schin { 687*4887Schin printf("#define LDBL_LLONG_MAX LDBL_LONG_MAX\n"); 688*4887Schin printf("#define LDBL_INTMAX_MAX LDBL_LONG_MAX\n"); 689*4887Schin } 690*4887Schin u++; 691*4887Schin w++; 692*4887Schin printf("#define LDBL_LONG_MIN (-%lu.0L)\n", u); 693*4887Schin if (sizeof(w) > sizeof(u)) 694*4887Schin { 695*4887Schin printf("#define LDBL_LLONG_MIN (-%llu.0L)\n", w); 696*4887Schin printf("#define LDBL_INTMAX_MIN LDBL_LLONG_MIN\n"); 697*4887Schin } 698*4887Schin else 699*4887Schin { 700*4887Schin printf("#define LDBL_LLONG_MIN LDBL_LONG_MIN\n"); 701*4887Schin printf("#define LDBL_INTMAX_MIN LDBL_LONG_MIN\n"); 702*4887Schin } 703*4887Schin #ifdef LDBL_DIG 704*4887Schin s = LDBL_DIG; 705*4887Schin #else 706*4887Schin l = pl = 1.0L; 707*4887Schin s = -1; 708*4887Schin do 709*4887Schin { 710*4887Schin s++; 711*4887Schin l *= 10.0L; 712*4887Schin } while (l != (l + pl)); 713*4887Schin #endif 714*4887Schin #if defined(LDBL_MIN) && defined(LDBL_MIN_EXP) 715*4887Schin i = LDBL_MIN_EXP; 716*4887Schin ml = LDBL_MIN; 717*4887Schin #else 718*4887Schin i = 3; 719*4887Schin l = pl = 1.0L; 720*4887Schin do 721*4887Schin { 722*4887Schin i--; 723*4887Schin ml = pl; 724*4887Schin pl = l; 725*4887Schin l /= 2.0L; 726*4887Schin } while (l < pl); 727*4887Schin #ifdef LDBL_MIN_EXP 728*4887Schin i = LDBL_MIN_EXP; 729*4887Schin #endif 730*4887Schin #ifdef LDBL_MIN 731*4887Schin ml = LDBL_MIN; 732*4887Schin #endif 733*4887Schin #endif 734*4887Schin #ifndef LDBL_DIG 735*4887Schin printf("#ifndef LDBL_DIG\n"); 736*4887Schin printf("#define LDBL_DIG %d\n", s); 737*4887Schin printf("#endif\n"); 738*4887Schin #endif 739*4887Schin #ifndef LDBL_MIN 740*4887Schin printf("#ifndef LDBL_MIN\n"); 741*4887Schin printf("#define LDBL_MIN %.*LE%s\n", s + 1, ml, ls); 742*4887Schin printf("#endif\n"); 743*4887Schin #endif 744*4887Schin #ifndef LDBL_MIN_EXP 745*4887Schin printf("#ifndef LDBL_MIN_EXP\n"); 746*4887Schin printf("#define LDBL_MIN_EXP (%d)\n", i); 747*4887Schin printf("#endif\n"); 748*4887Schin #endif 749*4887Schin 750*4887Schin #if defined(LDBL_MAX) && defined(LDBL_MAX_EXP) 751*4887Schin i = LDBL_MAX_EXP; 752*4887Schin l = LDBL_MAX; 753*4887Schin #else 754*4887Schin i = -1; 755*4887Schin l = pl = 1.0L; 756*4887Schin do 757*4887Schin { 758*4887Schin i++; 759*4887Schin ml = pl; 760*4887Schin pl = l; 761*4887Schin l *= 2.0L; 762*4887Schin } while (l > pl); 763*4887Schin l = 1.0L; 764*4887Schin do 765*4887Schin { 766*4887Schin l *= 2.0L; 767*4887Schin } while (ml == (ml + l)); 768*4887Schin l = (ml - l) * 2.0L + l; 769*4887Schin #ifdef LDBL_MAX_EXP 770*4887Schin i = LDBL_MAX_EXP; 771*4887Schin #endif 772*4887Schin #ifdef LDBL_MAX 773*4887Schin l = LDBL_MAX; 774*4887Schin #endif 775*4887Schin #endif 776*4887Schin #ifndef LDBL_MAX 777*4887Schin printf("#ifndef LDBL_MAX\n"); 778*4887Schin printf("#define LDBL_MAX %.*LE%s\n", s + 1, l, ls); 779*4887Schin printf("#endif\n"); 780*4887Schin #endif 781*4887Schin #ifndef LDBL_MAX_EXP 782*4887Schin printf("#ifndef LDBL_MAX_EXP\n"); 783*4887Schin printf("#define LDBL_MAX_EXP %d\n", i); 784*4887Schin printf("#endif\n"); 785*4887Schin #endif 786*4887Schin 787*4887Schin #ifdef LDBL_MIN_10_EXP 788*4887Schin i = LDBL_MIN_10_EXP; 789*4887Schin #else 790*4887Schin i = 2; 791*4887Schin l = 1.0L; 792*4887Schin do 793*4887Schin { 794*4887Schin i--; 795*4887Schin pl = l; 796*4887Schin l /= 10.0L; 797*4887Schin } while (l < pl); 798*4887Schin #endif 799*4887Schin #ifndef LDBL_MIN_10_EXP 800*4887Schin printf("#ifndef LDBL_MIN_10_EXP\n"); 801*4887Schin printf("#define LDBL_MIN_10_EXP (%d)\n", i); 802*4887Schin printf("#endif\n"); 803*4887Schin #endif 804*4887Schin 805*4887Schin #ifdef LDBL_MAX_10_EXP 806*4887Schin i = LDBL_MAX_10_EXP; 807*4887Schin #else 808*4887Schin i = -2; 809*4887Schin l = 1.0L; 810*4887Schin do 811*4887Schin { 812*4887Schin i++; 813*4887Schin pl = l; 814*4887Schin l *= 10.0L; 815*4887Schin } while (l > pl); 816*4887Schin #endif 817*4887Schin #ifndef LDBL_MAX_10_EXP 818*4887Schin printf("#ifndef LDBL_MAX_10_EXP\n"); 819*4887Schin printf("#define LDBL_MAX_10_EXP %d\n", i); 820*4887Schin printf("#endif\n"); 821*4887Schin #endif 822*4887Schin fp = "LDBL"; 823*4887Schin #else 824*4887Schin fp = "DBL"; 825*4887Schin #endif 826*4887Schin 827*4887Schin printf("\n"); 828*4887Schin printf("#define FLTMAX_UINTMAX_MAX %s_UINTMAX_MAX\n", fp); 829*4887Schin printf("#define FLTMAX_INTMAX_MAX %s_INTMAX_MAX\n", fp); 830*4887Schin printf("#define FLTMAX_INTMAX_MIN %s_INTMAX_MIN\n", fp); 831*4887Schin 832*4887Schin #ifdef SIGFPE 833*4887Schin if (!caught) 834*4887Schin { 835*4887Schin #if !__MVS__ 836*4887Schin f = xf; 837*4887Schin f *= 2; 838*4887Schin if (!f) 839*4887Schin #endif 840*4887Schin caught = 1; 841*4887Schin } 842*4887Schin if (caught) 843*4887Schin printf("\n#define _ast_fltsig %d\n", SIGFPE); 844*4887Schin #endif 845*4887Schin 846*4887Schin printf("\n"); 847*4887Schin #if !_lib_frexp 848*4887Schin printf("extern double frexp(double, int*);\n"); 849*4887Schin #endif 850*4887Schin #if !_lib_frexpl 851*4887Schin printf("extern _ast_fltmax_t frexpl(_ast_fltmax_t, int*);\n"); 852*4887Schin #endif 853*4887Schin #if !_lib_ldexp 854*4887Schin printf("extern double ldexp(double, int);\n"); 855*4887Schin #endif 856*4887Schin #if !_lib_ldexpl 857*4887Schin printf("extern _ast_fltmax_t ldexpl(_ast_fltmax_t, int);\n"); 858*4887Schin #endif 859*4887Schin 860*4887Schin return 0; 861*4887Schin } 862*4887Schin}end 863*4887Schin 864*4887Schintst - note{ double exponent bitfoolery }end output{ 865*4887Schin #include "FEATURE/common" 866*4887Schin typedef union _dbl_exp_u 867*4887Schin { 868*4887Schin unsigned _ast_int4_t e[sizeof(double) / 4]; 869*4887Schin double f; 870*4887Schin } _ast_dbl_exp_t; 871*4887Schin int 872*4887Schin main() 873*4887Schin { 874*4887Schin int i; 875*4887Schin int j; 876*4887Schin unsigned _ast_int4_t e; 877*4887Schin _ast_dbl_exp_t a; 878*4887Schin _ast_dbl_exp_t b; 879*4887Schin a.f = 1; 880*4887Schin b.f = 2; 881*4887Schin for (i = 0; i < sizeof(a.e) / sizeof(a.e[0]); i++) 882*4887Schin if (e = a.e[i] ^ b.e[i]) 883*4887Schin { 884*4887Schin for (j = i + 1; j < sizeof(a.e) / sizeof(a.e[0]); j++) 885*4887Schin if (a.e[j] ^ b.e[j]) 886*4887Schin return 0; 887*4887Schin 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"); 888*4887Schin printf("#define _ast_dbl_exp_index %d\n", i); 889*4887Schin for (i = 0; !(e & 1); e >>= 1, i++); 890*4887Schin printf("#define _ast_dbl_exp_shift %d\n\n", i); 891*4887Schin return 0; 892*4887Schin } 893*4887Schin return 0; 894*4887Schin } 895*4887Schin}end 896*4887Schin 897*4887Schintst - note{ long double exponent bitfoolery }end output{ 898*4887Schin #include "FEATURE/common" 899*4887Schin typedef union _ast_fltmax_exp_u 900*4887Schin { 901*4887Schin unsigned _ast_int4_t e[sizeof(_ast_fltmax_t) / 4]; 902*4887Schin _ast_fltmax_t f; 903*4887Schin } _ast_fltmax_exp_t; 904*4887Schin int 905*4887Schin main() 906*4887Schin { 907*4887Schin int i; 908*4887Schin int j; 909*4887Schin unsigned _ast_int4_t e; 910*4887Schin _ast_fltmax_exp_t a; 911*4887Schin _ast_fltmax_exp_t b; 912*4887Schin a.f = 1; 913*4887Schin b.f = 2; 914*4887Schin for (i = 0; i < sizeof(a.e) / sizeof(a.e[0]); i++) 915*4887Schin if (e = a.e[i] ^ b.e[i]) 916*4887Schin { 917*4887Schin for (j = i + 1; j < sizeof(a.e) / sizeof(a.e[0]); j++) 918*4887Schin if (a.e[j] ^ b.e[j]) 919*4887Schin return 0; 920*4887Schin 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"); 921*4887Schin printf("#define _ast_fltmax_exp_index\t%d\n", i); 922*4887Schin for (i = 0; !(e & 1); e >>= 1, i++); 923*4887Schin printf("#define _ast_fltmax_exp_shift\t%d\n\n", i); 924*4887Schin return 0; 925*4887Schin } 926*4887Schin return 0; 927*4887Schin } 928*4887Schin}end 929*4887Schin 930*4887Schintst - -DN=1 - -DN=2 note{ _ast_fltmax_t maximum integral type }end output{ 931*4887Schin int 932*4887Schin main() 933*4887Schin { 934*4887Schin #if N == 1 935*4887Schin unsigned long long m; 936*4887Schin long double f = 123.456; 937*4887Schin 938*4887Schin m = f; 939*4887Schin if (!m || f == m) 940*4887Schin return 1; 941*4887Schin printf("#define _ast_flt_unsigned_max_t unsigned long long\n"); 942*4887Schin #else 943*4887Schin printf("#define _ast_flt_unsigned_max_t unsigned long\n"); 944*4887Schin #endif 945*4887Schin return 0; 946*4887Schin } 947*4887Schin}end 948*4887Schin 949*4887Schintst - -lm -DSTRTO=1 - -DSCAN=1 - -DDIV=1 - -DEXP=1 - -DADD=1 - -DMPY=1 note{ INF and NAN memory representations }end output{ 950*4887Schin #include "FEATURE/common" 951*4887Schin #include <sys/types.h> 952*4887Schin #include <signal.h> 953*4887Schin #if _hdr_float 954*4887Schin #include <float.h> 955*4887Schin #endif 956*4887Schin #if _hdr_limits 957*4887Schin #include <limits.h> 958*4887Schin #endif 959*4887Schin #if _hdr_math 960*4887Schin #include <math.h> 961*4887Schin #endif 962*4887Schin #if _hdr_values 963*4887Schin #include <values.h> 964*4887Schin #endif 965*4887Schin #if STRTO && _hdr_stdlib 966*4887Schin #include <stdlib.h> 967*4887Schin #endif 968*4887Schin #if !defined(FLT_MAX) && defined(MAXFLOAT) 969*4887Schin #define FLT_MAX MAXFLOAT 970*4887Schin #endif 971*4887Schin #if !defined(DBL_MAX) && defined(MAXDOUBLE) 972*4887Schin #define DBL_MAX MAXDOUBLE 973*4887Schin #endif 974*4887Schin #if _ast_fltmax_double 975*4887Schin #undef LDBL_MAX 976*4887Schin #endif 977*4887Schin static void 978*4887Schin #if _STD_ 979*4887Schin list(const char* typ, const char* var, void* val, int siz) 980*4887Schin #else 981*4887Schin list(typ, var, val, siz) 982*4887Schin char* typ; 983*4887Schin char* var; 984*4887Schin void* val; 985*4887Schin int siz; 986*4887Schin #endif 987*4887Schin { 988*4887Schin register unsigned char* u = (unsigned char*)val; 989*4887Schin register unsigned char* e = u + siz; 990*4887Schin 991*4887Schin printf("#define _ast_%s_%s_init\t0x%02x", typ, var, *u); 992*4887Schin while (++u < e) 993*4887Schin printf(",0x%02x", *u); 994*4887Schin printf("\n"); 995*4887Schin } 996*4887Schin int 997*4887Schin main() 998*4887Schin { 999*4887Schin #if SCAN || STRTO 1000*4887Schin #undef NAN 1001*4887Schin #define NAN "NaN" 1002*4887Schin #undef INF 1003*4887Schin #define INF "INF" 1004*4887Schin { 1005*4887Schin float f; 1006*4887Schin 1007*4887Schin #if SCAN 1008*4887Schin if (sscanf(NAN, "%g", &f) != 1) 1009*4887Schin return 1; 1010*4887Schin #else 1011*4887Schin f = atof(NAN); 1012*4887Schin #endif 1013*4887Schin list("flt", "nan", &f, sizeof(f)); 1014*4887Schin #if SCAN 1015*4887Schin if (sscanf(INF, "%g", &f) != 1) 1016*4887Schin return 1; 1017*4887Schin #else 1018*4887Schin f = atof(INF); 1019*4887Schin #endif 1020*4887Schin list("flt", "inf", &f, sizeof(f)); 1021*4887Schin } 1022*4887Schin { 1023*4887Schin double f; 1024*4887Schin #if STRTO 1025*4887Schin char* e; 1026*4887Schin #endif 1027*4887Schin 1028*4887Schin #if SCAN 1029*4887Schin if (sscanf(NAN, "%lg", &f) != 1) 1030*4887Schin return 1; 1031*4887Schin #else 1032*4887Schin f = strtod(NAN, &e); 1033*4887Schin if (*e) 1034*4887Schin return 1; 1035*4887Schin #endif 1036*4887Schin list("dbl", "nan", &f, sizeof(f)); 1037*4887Schin #if SCAN 1038*4887Schin if (sscanf(INF, "%lg", &f) != 1) 1039*4887Schin return 1; 1040*4887Schin #else 1041*4887Schin f = strtod(INF, &e); 1042*4887Schin if (*e) 1043*4887Schin return 1; 1044*4887Schin #endif 1045*4887Schin list("dbl", "inf", &f, sizeof(f)); 1046*4887Schin } 1047*4887Schin #ifdef LDBL_MAX 1048*4887Schin { 1049*4887Schin long double f; 1050*4887Schin #if STRTO 1051*4887Schin char* e; 1052*4887Schin #endif 1053*4887Schin 1054*4887Schin #if SCAN 1055*4887Schin if (sscanf(NAN, "%Lg", &f) != 1) 1056*4887Schin return 1; 1057*4887Schin #else 1058*4887Schin f = strtold(NAN, &e); 1059*4887Schin if (*e) 1060*4887Schin return 1; 1061*4887Schin #endif 1062*4887Schin list("ldbl", "nan", &f, sizeof(f)); 1063*4887Schin #if SCAN 1064*4887Schin if (sscanf(INF, "%Lg", &f) != 1) 1065*4887Schin return 1; 1066*4887Schin #else 1067*4887Schin f = strtold(INF, &e); 1068*4887Schin if (*e) 1069*4887Schin return 1; 1070*4887Schin #endif 1071*4887Schin list("ldbl", "inf", &f, sizeof(f)); 1072*4887Schin } 1073*4887Schin #endif 1074*4887Schin #else 1075*4887Schin #ifdef SIGFPE 1076*4887Schin signal(SIGFPE, SIG_IGN); 1077*4887Schin #endif 1078*4887Schin #ifdef FLT_MAX 1079*4887Schin { 1080*4887Schin float f = FLT_MAX; 1081*4887Schin #if DIV 1082*4887Schin float z = 0; 1083*4887Schin 1084*4887Schin f = 0.0 / z; 1085*4887Schin if (!f) 1086*4887Schin return 1; 1087*4887Schin list("flt", "nan", &f, sizeof(f)); 1088*4887Schin f = 1.0 / z; 1089*4887Schin list("flt", "inf", &f, sizeof(f)); 1090*4887Schin #else 1091*4887Schin #if ADD 1092*4887Schin f += f; 1093*4887Schin #endif 1094*4887Schin #if EXP 1095*4887Schin f = exp(f); 1096*4887Schin #endif 1097*4887Schin #if MPY 1098*4887Schin f *= 2; 1099*4887Schin #endif 1100*4887Schin list("flt", "nan", &f, sizeof(f)); 1101*4887Schin list("flt", "inf", &f, sizeof(f)); 1102*4887Schin #endif 1103*4887Schin } 1104*4887Schin #endif 1105*4887Schin #ifdef DBL_MAX 1106*4887Schin { 1107*4887Schin double f = DBL_MAX; 1108*4887Schin #if DIV 1109*4887Schin double z = 0; 1110*4887Schin 1111*4887Schin f = 0.0 / z; 1112*4887Schin if (!f) 1113*4887Schin return 1; 1114*4887Schin list("dbl", "nan", &f, sizeof(f)); 1115*4887Schin f = 1.0 / z; 1116*4887Schin list("dbl", "inf", &f, sizeof(f)); 1117*4887Schin #else 1118*4887Schin #if ADD 1119*4887Schin f += f; 1120*4887Schin #endif 1121*4887Schin #if EXP 1122*4887Schin f = exp(f); 1123*4887Schin #endif 1124*4887Schin #if MPY 1125*4887Schin f *= 2; 1126*4887Schin #endif 1127*4887Schin list("dbl", "nan", &f, sizeof(f)); 1128*4887Schin list("dbl", "inf", &f, sizeof(f)); 1129*4887Schin #endif 1130*4887Schin } 1131*4887Schin #endif 1132*4887Schin #ifdef LDBL_MAX 1133*4887Schin { 1134*4887Schin long double f = LDBL_MAX; 1135*4887Schin #if DIV 1136*4887Schin long double z = 0; 1137*4887Schin 1138*4887Schin f = 0.0 / z; 1139*4887Schin if (!f) 1140*4887Schin return 1; 1141*4887Schin list("ldbl", "nan", &f, sizeof(f)); 1142*4887Schin f = 1.0 / z; 1143*4887Schin list("ldbl", "inf", &f, sizeof(f)); 1144*4887Schin #else 1145*4887Schin #if ADD 1146*4887Schin f += f; 1147*4887Schin #endif 1148*4887Schin #if EXP 1149*4887Schin f = exp(f); 1150*4887Schin #endif 1151*4887Schin #if MPY 1152*4887Schin f *= 2; 1153*4887Schin #endif 1154*4887Schin list("ldbl", "nan", &f, sizeof(f)); 1155*4887Schin list("ldbl", "inf", &f, sizeof(f)); 1156*4887Schin #endif 1157*4887Schin } 1158*4887Schin #endif 1159*4887Schin #endif 1160*4887Schin return 0; 1161*4887Schin } 1162*4887Schin}end 1163