X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Ffloat-format.c;h=4ba4c9375b6efd410f5362b6e48209838e7688ab;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=79ba94469fc9fa085f2318d5f48d596f9c6b752f;hpb=a3d1c6cd2c0ad62ada29c38b67df483abc762c44;p=pspp-builds.git diff --git a/src/libpspp/float-format.c b/src/libpspp/float-format.c index 79ba9446..4ba4c937 100644 --- a/src/libpspp/float-format.c +++ b/src/libpspp/float-format.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,18 +16,18 @@ #include -#include +#include "libpspp/float-format.h" +#include #include #include #include +#include -#include -#include -#include +#include "libpspp/assertion.h" +#include "libpspp/integer-format.h" -#include "error.h" -#include +#include "gl/error.h" /* Neutral intermediate representation for binary floating-point numbers. */ struct fp @@ -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);