diff --git a/src/c/ecl_constants.h b/src/c/ecl_constants.h index ce7ccda23..dfacad53c 100644 --- a/src/c/ecl_constants.h +++ b/src/c/ecl_constants.h @@ -15,41 +15,57 @@ ecl_def_ct_single_float(flt_max,FLT_MAX,static,const); ecl_def_ct_single_float(flt_max_neg,-FLT_MAX,static,const); -ecl_def_ct_single_float(flt_min,FLT_MIN,static,const); -ecl_def_ct_single_float(flt_min_neg,-FLT_MIN,static,const); +ecl_def_ct_single_float(flt_min,FLT_TRUE_MIN,static,const); +ecl_def_ct_single_float(flt_min_neg,-FLT_TRUE_MIN,static,const); +ecl_def_ct_single_float(flt_min_norm,FLT_MIN,static,const); +ecl_def_ct_single_float(flt_min_neg_norm,-FLT_MIN,static,const); #define ECL_LEAST_POSITIVE_SINGLE_FLOAT (cl_object)(&flt_min_data) #define ECL_LEAST_NEGATIVE_SINGLE_FLOAT (cl_object)(&flt_min_neg_data) +#define ECL_LEAST_POSITIVE_NORMALIZED_SINGLE_FLOAT (cl_object)(&flt_min_norm_data) +#define ECL_LEAST_NEGATIVE_NORMALIZED_SINGLE_FLOAT (cl_object)(&flt_min_neg_norm_data) #define ECL_MOST_POSITIVE_SINGLE_FLOAT (cl_object)(&flt_max_data) #define ECL_MOST_NEGATIVE_SINGLE_FLOAT (cl_object)(&flt_max_neg_data) #define ECL_LEAST_POSITIVE_SHORT_FLOAT (cl_object)(&flt_min_data) #define ECL_LEAST_NEGATIVE_SHORT_FLOAT (cl_object)(&flt_min_neg_data) +#define ECL_LEAST_POSITIVE_NORMALIZED_SHORT_FLOAT (cl_object)(&flt_min_norm_data) +#define ECL_LEAST_NEGATIVE_NORMALIZED_SHORT_FLOAT (cl_object)(&flt_min_neg_norm_data) #define ECL_MOST_POSITIVE_SHORT_FLOAT (cl_object)(&flt_max_data) #define ECL_MOST_NEGATIVE_SHORT_FLOAT (cl_object)(&flt_max_neg_data) ecl_def_ct_double_float(dbl_max,DBL_MAX,static,const); ecl_def_ct_double_float(dbl_max_neg,-DBL_MAX,static,const); -ecl_def_ct_double_float(dbl_min,DBL_MIN,static,const); -ecl_def_ct_double_float(dbl_min_neg,-DBL_MIN,static,const); +ecl_def_ct_double_float(dbl_min,DBL_TRUE_MIN,static,const); +ecl_def_ct_double_float(dbl_min_neg,-DBL_TRUE_MIN,static,const); +ecl_def_ct_double_float(dbl_min_norm,DBL_MIN,static,const); +ecl_def_ct_double_float(dbl_min_neg_norm,-DBL_MIN,static,const); #define ECL_LEAST_POSITIVE_DOUBLE_FLOAT (cl_object)(&dbl_min_data) #define ECL_LEAST_NEGATIVE_DOUBLE_FLOAT (cl_object)(&dbl_min_neg_data) +#define ECL_LEAST_POSITIVE_NORMALIZED_DOUBLE_FLOAT (cl_object)(&dbl_min_norm_data) +#define ECL_LEAST_NEGATIVE_NORMALIZED_DOUBLE_FLOAT (cl_object)(&dbl_min_neg_norm_data) #define ECL_MOST_POSITIVE_DOUBLE_FLOAT (cl_object)(&dbl_max_data) #define ECL_MOST_NEGATIVE_DOUBLE_FLOAT (cl_object)(&dbl_max_neg_data) #ifdef ECL_LONG_FLOAT ecl_def_ct_long_float(ldbl_max,LDBL_MAX,static,const); ecl_def_ct_long_float(ldbl_max_neg,-LDBL_MAX,static,const); -ecl_def_ct_long_float(ldbl_min,LDBL_MIN,static,const); -ecl_def_ct_long_float(ldbl_min_neg,-LDBL_MIN,static,const); +ecl_def_ct_long_float(ldbl_min,LDBL_TRUE_MIN,static,const); +ecl_def_ct_long_float(ldbl_min_neg,-LDBL_TRUE_MIN,static,const); +ecl_def_ct_long_float(ldbl_min_norm,LDBL_MIN,static,const); +ecl_def_ct_long_float(ldbl_min_neg_norm,-LDBL_MIN,static,const); #define ECL_LEAST_POSITIVE_LONG_FLOAT (cl_object)(&ldbl_min_data) #define ECL_LEAST_NEGATIVE_LONG_FLOAT (cl_object)(&ldbl_min_neg_data) +#define ECL_LEAST_POSITIVE_NORMALIZED_LONG_FLOAT (cl_object)(&ldbl_min_norm_data) +#define ECL_LEAST_NEGATIVE_NORMALIZED_LONG_FLOAT (cl_object)(&ldbl_min_neg_norm_data) #define ECL_MOST_POSITIVE_LONG_FLOAT (cl_object)(&ldbl_max_data) #define ECL_MOST_NEGATIVE_LONG_FLOAT (cl_object)(&ldbl_max_neg_data) #else #define ECL_LEAST_POSITIVE_LONG_FLOAT (cl_object)(&dbl_min_data) #define ECL_LEAST_NEGATIVE_LONG_FLOAT (cl_object)(&dbl_min_neg_data) +#define ECL_LEAST_POSITIVE_NORMALIZED_LONG_FLOAT (cl_object)(&dbl_min_norm_data) +#define ECL_LEAST_NEGATIVE_NORMALIZED_LONG_FLOAT (cl_object)(&dbl_min_neg_norm_data) #define ECL_MOST_POSITIVE_LONG_FLOAT (cl_object)(&dbl_max_data) #define ECL_MOST_NEGATIVE_LONG_FLOAT (cl_object)(&dbl_max_neg_data) #endif diff --git a/src/c/symbols_list.h b/src/c/symbols_list.h index 0d0946323..7108e67ae 100755 --- a/src/c/symbols_list.h +++ b/src/c/symbols_list.h @@ -545,18 +545,18 @@ cl_symbols[] = { {"LDIFF", CL_ORDINARY, cl_ldiff, 2, OBJNULL}, {"LEAST-NEGATIVE-DOUBLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_DOUBLE_FLOAT}, {"LEAST-NEGATIVE-LONG-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_LONG_FLOAT}, -{"LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_DOUBLE_FLOAT}, -{"LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_LONG_FLOAT}, -{"LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_SHORT_FLOAT}, -{"LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_SINGLE_FLOAT}, +{"LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_NORMALIZED_DOUBLE_FLOAT}, +{"LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_NORMALIZED_LONG_FLOAT}, +{"LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_NORMALIZED_SHORT_FLOAT}, +{"LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_NORMALIZED_SINGLE_FLOAT}, {"LEAST-NEGATIVE-SHORT-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_SHORT_FLOAT}, {"LEAST-NEGATIVE-SINGLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_NEGATIVE_SINGLE_FLOAT}, {"LEAST-POSITIVE-DOUBLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_DOUBLE_FLOAT}, {"LEAST-POSITIVE-LONG-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_LONG_FLOAT}, -{"LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_DOUBLE_FLOAT}, -{"LEAST-POSITIVE-NORMALIZED-LONG-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_LONG_FLOAT}, -{"LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_SHORT_FLOAT}, -{"LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_SINGLE_FLOAT}, +{"LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_NORMALIZED_DOUBLE_FLOAT}, +{"LEAST-POSITIVE-NORMALIZED-LONG-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_NORMALIZED_LONG_FLOAT}, +{"LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_NORMALIZED_SHORT_FLOAT}, +{"LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_NORMALIZED_SINGLE_FLOAT}, {"LEAST-POSITIVE-SHORT-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_SHORT_FLOAT}, {"LEAST-POSITIVE-SINGLE-FLOAT", CL_CONSTANT, NULL, -1, ECL_LEAST_POSITIVE_SINGLE_FLOAT}, {"LENGTH", CL_ORDINARY, cl_length, 1, OBJNULL}, diff --git a/src/cmp/cmpct.lsp b/src/cmp/cmpct.lsp index f70f323c6..1c9e29f15 100644 --- a/src/cmp/cmpct.lsp +++ b/src/cmp/cmpct.lsp @@ -135,21 +135,21 @@ (MOST-NEGATIVE-SHORT-FLOAT "-FLT_MAX") (MOST-NEGATIVE-SINGLE-FLOAT "-FLT_MAX") - (LEAST-POSITIVE-SHORT-FLOAT "FLT_MIN") - (LEAST-POSITIVE-SINGLE-FLOAT "FLT_MIN") + (LEAST-POSITIVE-SHORT-FLOAT "FLT_TRUE_MIN") + (LEAST-POSITIVE-SINGLE-FLOAT "FLT_TRUE_MIN") (LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT "FLT_MIN") (LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT" FLT_MIN") - (LEAST-NEGATIVE-SHORT-FLOAT "-FLT_MIN") - (LEAST-NEGATIVE-SINGLE-FLOAT "-FLT_MIN") + (LEAST-NEGATIVE-SHORT-FLOAT "-FLT_TRUE_MIN") + (LEAST-NEGATIVE-SINGLE-FLOAT "-FLT_TRUE_MIN") (LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT "-FLT_MIN") (LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT "-FLT_MIN") (MOST-POSITIVE-DOUBLE-FLOAT "DBL_MAX") (MOST-NEGATIVE-DOUBLE-FLOAT "-DBL_MAX") - (LEAST-POSITIVE-DOUBLE-FLOAT "DBL_MIN") + (LEAST-POSITIVE-DOUBLE-FLOAT "DBL_TRUE_MIN") (LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT "DBL_MIN") - (LEAST-NEGATIVE-DOUBLE-FLOAT "-DBL_MIN") + (LEAST-NEGATIVE-DOUBLE-FLOAT "-DBL_TRUE_MIN") (LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT "-DBL_MIN") #+ieee-floating-point @@ -164,9 +164,9 @@ #+long-float ,@'((MOST-POSITIVE-LONG-FLOAT "LDBL_MAX") (MOST-NEGATIVE-LONG-FLOAT "-LDBL_MAX") - (LEAST-POSITIVE-LONG-FLOAT "LDBL_MIN") + (LEAST-POSITIVE-LONG-FLOAT "LDBL_TRUE_MIN") (LEAST-POSITIVE-NORMALIZED-LONG-FLOAT" LDBL_MIN") - (LEAST-NEGATIVE-LONG-FLOAT "-LDBL_MIN") + (LEAST-NEGATIVE-LONG-FLOAT "-LDBL_TRUE_MIN") (LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT "-LDBL_MIN") #+ieee-floating-point (LONG-FLOAT-POSITIVE-INFINITY "INFINITY") diff --git a/src/h/internal.h b/src/h/internal.h index d7cc1bd00..65811e122 100755 --- a/src/h/internal.h +++ b/src/h/internal.h @@ -669,6 +669,23 @@ static union { # endif /* _MSC_VER == 1600 */ #endif /* ~NAN */ +/* + * If minimum unnormalized floating point values defined in ISO C11 + * are not declared, we use the normalized ones as the next best + * portable approximation. + */ +#include + +#ifndef FLT_TRUE_MIN +# define FLT_TRUE_MIN FLT_MIN +#endif +#ifndef DBL_TRUE_MIN +# define DBL_TRUE_MIN DBL_MIN +#endif +#ifndef LDBL_TRUE_MIN +# define LDBL_TRUE_MIN LDBL_MIN +#endif + #ifdef __cplusplus } #endif