Commit 5afba758 authored by Miguel de Icaza's avatar Miguel de Icaza Committed by Arturo Espinosa
Browse files

Fixed. Patch from Takashi Matsuda

1999-03-31  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* src/about.c (dialog_about): Fixed.  Patch from Takashi Matsuda
parent ed89841e
1999-03-31 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/about.c (dialog_about): Fixed. Patch from Takashi Matsuda
1999-03-30 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/fn-financial.c (gnumeric_dollarfr): Use floor, not floorf,
as I can not find documentation on this on my system.
* src/fn-math.c (gnumeric_ceiling): Use ceil, not ceilf. I can
not find documentation on this on my system
1998-11-12 Morten Wellinder <terra@diku.dk>
* src/fn-stat.c (gnumeric_variance): More precise method of
computing the variance.
1999-03-30 Michael Meeks <michael@imaginator.com>
* src/sheet.c (sheet_selection_first_range): This returns
......
1999-03-31 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/about.c (dialog_about): Fixed. Patch from Takashi Matsuda
1999-03-30 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/fn-financial.c (gnumeric_dollarfr): Use floor, not floorf,
as I can not find documentation on this on my system.
* src/fn-math.c (gnumeric_ceiling): Use ceil, not ceilf. I can
not find documentation on this on my system
1998-11-12 Morten Wellinder <terra@diku.dk>
* src/fn-stat.c (gnumeric_variance): More precise method of
computing the variance.
1999-03-30 Michael Meeks <michael@imaginator.com>
* src/sheet.c (sheet_selection_first_range): This returns
......
1999-03-31 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/about.c (dialog_about): Fixed. Patch from Takashi Matsuda
1999-03-30 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/fn-financial.c (gnumeric_dollarfr): Use floor, not floorf,
as I can not find documentation on this on my system.
* src/fn-math.c (gnumeric_ceiling): Use ceil, not ceilf. I can
not find documentation on this on my system
1998-11-12 Morten Wellinder <terra@diku.dk>
* src/fn-stat.c (gnumeric_variance): More precise method of
computing the variance.
1999-03-30 Michael Meeks <michael@imaginator.com>
* src/sheet.c (sheet_selection_first_range): This returns
......
1999-03-31 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/about.c (dialog_about): Fixed. Patch from Takashi Matsuda
1999-03-30 Miguel de Icaza <miguel@nuclecu.unam.mx>
* src/fn-financial.c (gnumeric_dollarfr): Use floor, not floorf,
as I can not find documentation on this on my system.
* src/fn-math.c (gnumeric_ceiling): Use ceil, not ceilf. I can
not find documentation on this on my system
1998-11-12 Morten Wellinder <terra@diku.dk>
* src/fn-stat.c (gnumeric_variance): More precise method of
computing the variance.
1999-03-30 Michael Meeks <michael@imaginator.com>
* src/sheet.c (sheet_selection_first_range): This returns
......
......@@ -21,7 +21,7 @@ Performing this function on a string or empty cell simply does nothing. This fun
@SEEALSO=VARIANCE
@FUNCTION=DEC2BIN
@SYNTAX=DEC2BIN(number,places)
@SYNTAX=DEC2BIN(number[,places])
@DESCRIPTION=The DEC2BIN function converts a binary number to an octal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=BIN2DEC
......@@ -53,7 +53,7 @@ Performing this function on a string or empty cell simply does nothing.
@SEEALSO=STDEV
@FUNCTION=DELTA
@SYNTAX=DELTA(x,y)
@SYNTAX=DELTA(x[,y])
@DESCRIPTION=The DELTA function test for numerical eqivilance of two arguments returning 1 in equality y is optional, and defaults to 0
if either argument is non-numeric returns a #VALUE! error
@SEEALSO=EXACT,GESTEP
......@@ -71,7 +71,7 @@ If reference is neither an array nor a reference nor a range returns #VALUE!.
@SEEALSO=COLUMN,COLUMNS,ROWS
@FUNCTION=BIN2HEX
@SYNTAX=BIN2HEX(number,places)
@SYNTAX=BIN2HEX(number[,places])
@DESCRIPTION=The BIN2HEX function converts a binary number to a hexadecimal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=HEX2BIN
......@@ -99,6 +99,11 @@ Note that Gnumeric will perform regular string to serial number conversion for y
@DESCRIPTION=Returns @num as a formatted string with @decimals numbers after the decimal point, omitting commas if requested by @no_commas
@SEEALSO=
@FUNCTION=MOD
@SYNTAX=MOD(number,divisor)
@DESCRIPTION=Implements modulo arithmetic.Returns the remainder when divisor is divided into abs(number).
Returns #DIV/0! if divisor is zero.@SEEALSO=INT,FLOOR,CEIL
@FUNCTION=PERMUT
@SYNTAX=PERMUT(n,k)
@DESCRIPTION=The PERMUT function returns the number of permutations. @n is the number of objects, @k is the number of objects in each permutation.
......@@ -132,7 +137,7 @@ PMT = Payment received on annuityPRINCIPA(per-1) = amount of the remaining princ
@SEEALSO=PPMT,PV,FV
@FUNCTION=HEX2BIN
@SYNTAX=HEX2BIN(number,places)
@SYNTAX=HEX2BIN(number[,places])
@DESCRIPTION=The HEX2BIN function converts a binary number to a hexadecimal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=BIN2HEX
......@@ -409,7 +414,7 @@ If x is non-number FISHER returns #VALUE! error.
@SEEALSO=FISHER
@FUNCTION=OCT2BIN
@SYNTAX=OCT2BIN(number,places)
@SYNTAX=OCT2BIN(number[,places])
@DESCRIPTION=The OCT2BIN function converts a binary number to a hexadecimal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=BIN2OCT
......@@ -496,7 +501,7 @@ The day might be negative (to count backwards) and it is relative to the previou
@SEEALSO=MID, LEFT
@FUNCTION=OCT2HEX
@SYNTAX=OCT2HEX(number,places)
@SYNTAX=OCT2HEX(number[,places])
@DESCRIPTION=The OCT2HEX function converts a binary number to a hexadecimal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=OCT2HEX
......@@ -586,7 +591,7 @@ Performing this function on a string or empty cell returns an error.if f or t is
@SEEALSO=BINOMDIST,COMBIN,FACT,HYPGEOMDIST,PERMUT
@FUNCTION=DEC2OCT
@SYNTAX=DEC2OCT(number,places)
@SYNTAX=DEC2OCT(number[,places])
@DESCRIPTION=The DEC2OCT function converts a binary number to an octal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=OCT2DEC
......@@ -693,7 +698,7 @@ Strings and empty cells are simply ignored.
@SEEALSO=AND, OR
@FUNCTION=HEX2OCT
@SYNTAX=HEX2OCT(number,places)
@SYNTAX=HEX2OCT(number[,places])
@DESCRIPTION=The HEX2OCT function converts a binary number to a hexadecimal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=BIN2HEX
......@@ -744,7 +749,7 @@ Performing this function on a string or empty cell returns an error.
@SEEALSO=POISSON
@FUNCTION=GESTEP
@SYNTAX=GESTEP(x,y)
@SYNTAX=GESTEP(x[,y])
@DESCRIPTION=The GESTEP function test for if x is >= y, returning 1 if it is so, and 0 otherwise y is optional, and defaults to 0
if either argument is non-numeric returns a #VALUE! error
@SEEALSO=DELTA
......@@ -774,7 +779,7 @@ Performing this function on a non-integer or a negative number returns an error.
If fraction is non-integer it is truncated. If fraction<=0 DOLLARDE returns #NUM! error. @SEEALSO=DOLLARFR
@FUNCTION=ERF
@SYNTAX=ERF(lower limit, upper_limit)
@SYNTAX=ERF(lower limit[,upper_limit])
@DESCRIPTION=The ERF function returns the integral of the error function between the limits. If the upper limit ommitted ERF returns the integral between zero and the lower limit
if either lower or upper are not numeric a #VALUE! error is returned.if either lower or upper are < 0 a #NUM! error is returned.
@SEEALSO=ERFC
......@@ -786,7 +791,7 @@ Performing this function on a string or empty cell simply does nothing.
@SEEALSO=MIN,ABS
@FUNCTION=BIN2OCT
@SYNTAX=BIN2OCT(number,places)
@SYNTAX=BIN2OCT(number[,places])
@DESCRIPTION=The BIN2OCT function converts a binary number to an octal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=OCT2BIN
......@@ -808,7 +813,7 @@ Performing this function on a string or empty cell simply does nothing. This fun
@DESCRIPTION=Calculates the net present value of an investment.@SEEALSO=PV
@FUNCTION=DEC2HEX
@SYNTAX=DEC2HEX(number,places)
@SYNTAX=DEC2HEX(number[,places])
@DESCRIPTION=The DEC2HEX function converts a binary number to an octal number.places is an optional field, specifying to zero pad to that number of spaces.
if places is too small or negative #NUM! error is returned.
@SEEALSO=HEX2DEC
......
......@@ -92,6 +92,7 @@
<listitem><para><link linkend="gnumeric-MID">MID</link></para></listitem>
<listitem><para><link linkend="gnumeric-MIN">MIN</link></para></listitem>
<listitem><para><link linkend="gnumeric-MINUTE">MINUTE</link></para></listitem>
<listitem><para><link linkend="gnumeric-MOD">MOD</link></para></listitem>
<listitem><para><link linkend="gnumeric-MODE">MODE</link></para></listitem>
<listitem><para><link linkend="gnumeric-MONTH">MONTH</link></para></listitem>
<listitem><para><link linkend="gnumeric-NEGBINOMDIST">NEGBINOMDIST</link></para></listitem>
......@@ -269,7 +270,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>DEC2BIN(number,places)</synopsis>
<synopsis>DEC2BIN(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -395,7 +396,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>DELTA(x,y)</synopsis>
<synopsis>DELTA(x[,y])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -471,7 +472,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>BIN2HEX(number,places)</synopsis>
<synopsis>BIN2HEX(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -590,6 +591,22 @@
<refentry>
<refmeta>
<refentrytitle><anchor id="gnumeric-MOD">MOD</refentrytitle><refmiscinfo></refmiscinfo>
</refmeta>
<refnamediv>
<refname>MOD</refname>
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>MOD(number,divisor)</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>Implements modulo arithmetic.Returns the remainder when divisor is divided into abs(number).</para>
<para>Returns #DIV/0! if divisor is zero.@SEEALSO=INT,FLOOR,CEIL</para> <para></para>
<refentry>
<refmeta>
<refentrytitle><anchor id="gnumeric-PERMUT">PERMUT</refentrytitle><refmiscinfo></refmiscinfo>
......@@ -699,7 +716,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>HEX2BIN(number,places)</synopsis>
<synopsis>HEX2BIN(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -1885,7 +1902,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>OCT2BIN(number,places)</synopsis>
<synopsis>OCT2BIN(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -2223,7 +2240,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>OCT2HEX(number,places)</synopsis>
<synopsis>OCT2HEX(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -2622,7 +2639,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>DEC2OCT(number,places)</synopsis>
<synopsis>DEC2OCT(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -3084,7 +3101,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>HEX2OCT(number,places)</synopsis>
<synopsis>HEX2OCT(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -3294,7 +3311,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>GESTEP(x,y)</synopsis>
<synopsis>GESTEP(x[,y])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -3407,7 +3424,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>ERF(lower limit, upper_limit)</synopsis>
<synopsis>ERF(lower limit[,upper_limit])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -3456,7 +3473,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>BIN2OCT(number,places)</synopsis>
<synopsis>BIN2OCT(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......@@ -3552,7 +3569,7 @@
<refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<synopsis>DEC2HEX(number,places)</synopsis>
<synopsis>DEC2HEX(number[,places])</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
......
......@@ -303,7 +303,7 @@ gnumeric_dollarde (struct FunctionDefinition *i, Value *argv [], char **error_st
for (n=0; tmp; n++)
tmp /= 10;
floored = floorf(fractional_dollar);
floored = floor (fractional_dollar);
rest = fractional_dollar - floored;
tmp = (int) (rest * pow(10, n));
......@@ -342,7 +342,7 @@ gnumeric_dollarfr (struct FunctionDefinition *i, Value *argv [], char **error_st
for (n=0; tmp; n++)
tmp /= 10;
floored = floorf(fractional_dollar);
floored = floor (fractional_dollar);
rest = fractional_dollar - floored;
tmp = (int) (rest * fraction);
......
......@@ -422,14 +422,14 @@ gnumeric_ceiling (struct FunctionDefinition *i, Value *argv [], char **error_str
}
/* Find significance level */
for (n=0; n<12; n++) {
ceiled = ceilf(significance * k);
if (fabs(ceiled - (significance * k)) < significance/2)
ceiled = ceil (significance * k);
if (fabs (ceiled - (significance * k)) < significance/2)
break;
k *= 10;
}
ceiled *= 10;
div = ceilf((x * k * 10) / ceiled);
div = ceil ((x * k * 10) / ceiled);
mod = ((x * k * 10) / ceiled) - div;
return value_float (sign * ceiled * div / (k*10) -
......
......@@ -4,6 +4,7 @@
* Authors:
* Michael Meeks <michael@imaginator.com>
* Jukka-Pekka Iivonen <iivonen@iki.fi>
* Morten Welinder <terra@diku.dk>
*/
#include <config.h>
#include <gnome.h>
......@@ -75,42 +76,120 @@ static char *help_ = {
#endif
/* Take a deep breath.
We want to compute the variance of a population, i.e., we want to
compute
VAR(x1,...,xn) = (1/n) sum ((x_i - m)^2)
where m is the average of the population. The obvious way is to
run twice through the data: once to calculate m and once to calculate
the variance. From a numerical point of view, that is not the worst
thing to do, but it is wasteful to have to look at the data twice.
Mathematically, we might use the identity
VAR(x1,...,xn) = (sum x_i^2 - (sum x_i)^2 / n) / n
but this method has very bad numerical properties. The subtraction
loses a lot of precision and we can get negative results. Bad.
It is much better to keep track of the two values of
M_j = (1/j) sum x_i i = 1,...,j
Q_j = sum (x_i - M_j)^2 i = 1,...,j
as we encounter each new observation. If we set M_0 = Q_0 = 0, then
we have
M_j = M_{j-1} + (x - M_{j-1}) / j
Q_j = Q_{j-1} + (x - M_{j-1})^2 * (j-1) / j
Note, that we keep adding non-negative numbers to get Q_j. That gives
us good numerical properties. Finally, we get the variance by
VAR(x1,...,xn) = Q_n / n
March 30, 1999.
Morten Welinder
terra@gnu.org
PS: For fun, here is a comparison of the two methods.
robbie:~> ./a.out 40000.00000001 40000.00000002
N-variance according to method 1: -4.76837e-07 <--- wrong sign!
N-variance according to method 2: 2.50222e-17
robbie:~> ./a.out 40000.0000001 40000.0000002
N-variance according to method 1: 0 <--- zero!
N-variance according to method 2: 2.50004e-15
robbie:~> ./a.out 40000.000001 40000.000002
N-variance according to method 1: 2.38419e-07 <--- six ord. mag. off!
N-variance according to method 2: 2.5e-13
robbie:~> ./a.out 40000.00001 40000.00002
N-variance according to method 1: 2.38419e-07
N-variance according to method 2: 2.5e-11
robbie:~> ./a.out 40000.0001 40000.0002
N-variance according to method 1: 0 <--- zero again???
N-variance according to method 2: 2.5e-09
robbie:~> ./a.out 40000.001 40000.002
N-variance according to method 1: 2.38419e-07
N-variance according to method 2: 2.5e-07
robbie:~> ./a.out 40000.01 40000.02
N-variance according to method 1: 2.47955e-05
N-variance according to method 2: 2.5e-05
robbie:~> ./a.out 40000.1 40000.2
N-variance according to method 1: 0.0025003
N-variance according to method 2: 0.0025
*/
typedef struct {
guint32 num ;
float_t sum_x ;
float_t sum_x_squared ;
int N;
float_t M, Q;
} stat_closure_t;
static void
setup_stat_closure (stat_closure_t *cl)
{
cl->num = 0 ;
cl->sum_x = 0.0 ;
cl->sum_x_squared = 0.0 ;
cl->N = 0 ;
cl->M = 0.0 ;
cl->Q = 0.0 ;
}
static int
callback_function_stat (Sheet *sheet, Value *value, char **error_string, void *closure)
{
stat_closure_t *mm = closure;
float_t x, dx, dm;
switch (value->type){
case VALUE_INTEGER:
mm->num++ ;
mm->sum_x+=value->v.v_int ;
mm->sum_x_squared+= ((float_t)value->v.v_int)*((float_t)value->v.v_int) ;
x = value->v.v_int;
break;
case VALUE_FLOAT:
mm->num++ ;
mm->sum_x+=value->v.v_float ;
mm->sum_x_squared+= ((float_t)value->v.v_float)*((float_t)value->v.v_float) ;
break ;
x = value->v.v_float;
break;
default:
/* ignore strings */
break;
return TRUE;
}
dx = x - mm->M;
dm = dx / (mm->N + 1);
mm->M += dm;
mm->Q += mm->N * dx * dm;
mm->N++;
return TRUE;
}
......@@ -121,7 +200,9 @@ static char *help_varp = {
"@DESCRIPTION="
"VARP calculates the variance of a set of numbers "
"where each number is a member of a population "
"and the set is the entire population"
"and the set is the entire population."
"\n"
"(VARP is also known as the N-variance.)"
"\n"
"Performing this function on a string or empty cell simply does nothing."
"\n"
......@@ -141,11 +222,8 @@ gnumeric_varp (void *tsheet, GList *expr_node_list, int eval_col, int eval_row,
&cl, expr_node_list,
eval_col, eval_row, error_string);
num = (float_t)cl.num ;
ans = (num*cl.sum_x_squared - cl.sum_x*cl.sum_x)
/ (num * num) ;
return value_float(ans) ;
/* FIXME -- what about no arguments? */
return value_float (cl.Q / cl.N);
}
static char *help_var = {
......@@ -153,9 +231,13 @@ static char *help_var = {
"@SYNTAX=VAR(b1, b2, ...)\n"
"@DESCRIPTION="
"VAR estimates the variance of a sample of a population "
"VAR estimates the variance of a sample of a population. "
"To get the true variance of a complete population use @VARP"
"\n"
"(VAR is also known as the N-1-variance. Under reasonable "
"conditions, it is the maximum-likelihood estimator for the "
"true variance.)"
"\n"
"Performing this function on a string or empty cell simply does nothing."
"\n"
"@SEEALSO=VARP,STDEV")
......@@ -174,12 +256,8 @@ gnumeric_var (void *tsheet, GList *expr_node_list, int eval_col, int eval_row, c
&cl, expr_node_list,
eval_col, eval_row, error_string);
num = (float_t)cl.num ;
ans = (num*cl.sum_x_squared - cl.sum_x*cl.sum_x)
/ (num * (num - 1.0)) ;
return value_float(ans) ;
/* FIXME -- what about no arguments or just one argument? */
return value_float (cl.Q / (cl.N - 1));
}
static char *help_stdev = {
......@@ -209,7 +287,7 @@ static char *help_stdevp = {
"@SYNTAX=STDEVP(b1, b2, ...)\n"
"@DESCRIPTION="
"STDEV returns standard deviation of a set of numbers "
"STDEVP returns standard deviation of a set of numbers "
"treating these numbers as members of a complete population"
"\n"
"Performing this function on a string or empty cell simply does nothing."
......
msgid ""
msgstr ""
"POT-Creation-Date: 1999-03-30 10:26-0600\n"
"POT-Creation-Date: 1999-03-30 18:29-0600\n"
"Content-Type: text/plain; charset=iso8859-2\n"
"Date: 1998-09-30 00:38:13-0500\n"
"From: Petr Vyyhnalek <petr.vyhnalek@email.cz>\n"
......@@ -22,7 +22,7 @@ msgstr ""
msgid "Argument must be a Guile expression"
msgstr ""
#: plugins/guile/plugin.c:241 src/expr.c:509 src/fn-math.c:1270
#: plugins/guile/plugin.c:241 src/expr.c:509 src/fn-math.c:1311
#: src/fn-sheet.c:38 src/fn-sheet.c:83 src/fn-string.c:302
msgid "Invalid number of arguments"
msgstr "patn poet argumentu"
......@@ -398,7 +398,7 @@ msgid "Left"
msgstr "Vlevo"
#: src/dialog-cell-format.c:357 src/dialog-cell-format.c:366
#: src/workbook.c:851
#: src/workbook.c:861
msgid "Center"
msgstr "Doprosed"
......@@ -865,7 +865,7 @@ msgid ""
"@SEEALSO=OR, NOT"
msgstr ""
#: src/fn-math.c:187 src/fn-math.c:1008
#: src/fn-math.c:187 src/fn-math.c:1049
msgid "#VALUE"
msgstr ""
......@@ -970,7 +970,8 @@ msgstr ""
msgid "#VALUE!"
msgstr ""
#: src/fn-math.c:415 src/fn-math.c:1094
#. -0
#: src/fn-math.c:415 src/fn-math.c:946 src/fn-math.c:954 src/fn-math.c:1135
msgid "#NUM!"
msgstr ""
......@@ -1137,6 +1138,19 @@ msgstr ""
#: src/fn-math.c:925
msgid ""
"@FUNCTION=MOD\n"
"@SYNTAX=MOD(number,divisor)\n"
"@DESCRIPTION=Implements modulo arithmetic.Returns the remainder when divisor "
"is divided into abs(number).\n"
"Returns #DIV/0! if divisor is zero.@SEEALSO=INT,FLOOR,CEIL"
msgstr ""
#: src/fn-math.c:958
msgid "#DIV/0!"
msgstr ""
#: src/fn-math.c:966
msgid ""
"@FUNCTION=NOT\n"
"@SYNTAX=NOT(number)\n"
"@DESCRIPTION=Implements the logical NOT function: the result is TRUE if the "
......@@ -1145,7 +1159,7 @@ msgid ""
"@SEEALSO=AND, OR"
msgstr ""
#: src/fn-math.c:946
#: src/fn-math.c:987
msgid ""
"@FUNCTION=OR\n"
"@SYNTAX=OR(b1, b2, ...)\n"
......@@ -1159,7 +1173,7 @@ msgid ""
"@SEEALSO=AND, NOT"
msgstr ""
#: src/fn-math.c:1015