X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fexpressions%2Fhelpers.c;h=5aad13eb160b5f3f160481fcdaefa30a92b05354;hb=df2866a475d36298a14cc1e97c6118e088ac85da;hp=7c3371f5db97eb9daf3455c943014a035d178408;hpb=fe8dc2171009e90d2335f159d05f7e6660e24780;p=pspp diff --git a/src/language/expressions/helpers.c b/src/language/expressions/helpers.c index 7c3371f5db..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, 2011 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 @@ -175,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; } @@ -328,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; } } @@ -660,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; +}