X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Ffloat-format.c;h=0450dbeacc1d2573f35230b611a93db12b6ea7bd;hb=a554ee5cd3f34f39bd202f6a40a79256b537c40d;hp=79ba94469fc9fa085f2318d5f48d596f9c6b752f;hpb=a3d1c6cd2c0ad62ada29c38b67df483abc762c44;p=pspp diff --git a/src/libpspp/float-format.c b/src/libpspp/float-format.c index 79ba94469f..0450dbeacc 100644 --- a/src/libpspp/float-format.c +++ b/src/libpspp/float-format.c @@ -21,10 +21,10 @@ #include #include #include +#include #include #include -#include #include "error.h" #include @@ -187,6 +187,24 @@ float_identify (double expected_value, const void *number, size_t length, } return match_cnt; } + +/* Returns the double value that is just greater than -DBL_MAX, + which in PSPP syntax files is called LOWEST and used as the + low end of numeric ranges that are supposed to be unbounded on + the low end, as in the missing value set created by, + e.g. MISSING VALUES X(LOWEST THRU 5). (-DBL_MAX is used for + SYSMIS so it is not available for LOWEST.) */ +double +float_get_lowest (void) +{ + struct fp fp; + double x; + + fp.class = LOWEST; + fp.sign = POSITIVE; + assemble_number (FLOAT_NATIVE_DOUBLE, &fp, &x); + return x; +} /* Returns CNT bits in X starting from the given bit OFS. */ static inline uint64_t @@ -677,7 +695,7 @@ assemble_number (enum float_format type, struct fp *fp, void *number) break; case FLOAT_Z_SHORT: - put_uint64 (native_to_be32 (assemble_z (fp, 7, 24)), number); + put_uint32 (native_to_be32 (assemble_z (fp, 7, 24)), number); break; case FLOAT_Z_LONG: put_uint64 (native_to_be64 (assemble_z (fp, 7, 56)), number);