X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Ffloat-format.c;h=0450dbeacc1d2573f35230b611a93db12b6ea7bd;hb=c4b4f06dbfcff9582548a72d4e9ca0ffc90077fc;hp=7d65375ada731657a8ea50c221d843f8dacdb21e;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp-builds.git diff --git a/src/libpspp/float-format.c b/src/libpspp/float-format.c index 7d65375a..0450dbea 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 @@ -106,6 +106,16 @@ float_convert (enum float_format from, const void *src, } } +/* Converts SRC from format FROM to a native double and returns + the double. */ +double +float_get_double (enum float_format from, const void *src) +{ + double dst; + float_convert (from, src, FLOAT_NATIVE_DOUBLE, &dst); + return dst; +} + /* Returns the number of bytes in a number in the given FORMAT. */ size_t @@ -177,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 @@ -667,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);