X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fexpressions%2Fhelpers.c;h=5aad13eb160b5f3f160481fcdaefa30a92b05354;hb=73f03b54b10a9afa075e8dcf059cb225a038edab;hp=ac17c1cece19ce842bde63ae9495daac3d6e0109;hpb=a258e53c63a08b0ec48aea8f03808eb651729424;p=pspp diff --git a/src/language/expressions/helpers.c b/src/language/expressions/helpers.c index ac17c1cece..5aad13eb16 100644 --- a/src/language/expressions/helpers.c +++ b/src/language/expressions/helpers.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2008, 2010 Free Software Foundation, Inc. + Copyright (C) 2008, 2010, 2011, 2015 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 @@ -15,12 +15,15 @@ along with this program. If not, see . */ #include -#include "helpers.h" + +#include "language/expressions/helpers.h" + #include #include -#include -#include -#include "private.h" + +#include "language/expressions/private.h" +#include "libpspp/assertion.h" +#include "libpspp/pool.h" const struct substring empty_string = {NULL, 0}; @@ -172,12 +175,13 @@ recognize_unit (struct substring name, enum date_unit *unit) return true; } - /* TRANSLATORS: Don't translate the the actual unit names `weeks', `days' etc - They must remain in their original English. */ msg (SE, _("Unrecognized date unit `%.*s'. " - "Valid date units are `years', `quarters', `months', " - "`weeks', `days', `hours', `minutes', and `seconds'."), - (int) ss_length (name), ss_data (name)); + "Valid date units are `%s', `%s', `%s', " + "`%s', `%s', `%s', `%s', and `%s'."), + (int) ss_length (name), ss_data (name), + "years", "quarters", "months", + "weeks", "days", "hours", "minutes", "seconds"); + return false; } @@ -325,7 +329,7 @@ recognize_method (struct substring method_name, enum date_sum_method *method) else { msg (SE, _("Invalid DATESUM method. " - "Valid choices are `closest' and `rollover'.")); + "Valid choices are `%s' and `%s'."), "closest", "rollover"); return false; } } @@ -657,3 +661,17 @@ npdf_beta (double x, double a, double b, double lambda) return sum; } } + +double +round_nearest (double x, double mult, double fuzzbits) +{ + double adjustment; + + if (fuzzbits <= 0) + fuzzbits = settings_get_fuzzbits (); + adjustment = .5 + exp2 (fuzzbits - DBL_MANT_DIG); + + x /= mult; + x = x >= 0. ? floor (x + adjustment) : -floor (-x + adjustment); + return x * mult; +}