*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.84 2003/03/11 21:01:33 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.85 2003/04/21 00:22:24 tgl Exp $
*
*-------------------------------------------------------------------------
*/
sumX = transvalues[1];
sumX2 = transvalues[2];
- /* We define VARIANCE of no values to be NULL, of 1 value to be 0 */
- if (N == 0.0)
- PG_RETURN_NULL();
-
+ /* Sample variance is undefined when N is 0 or 1, so return NULL */
if (N <= 1.0)
- PG_RETURN_FLOAT8(0.0);
+ PG_RETURN_NULL();
numerator = N * sumX2 - sumX * sumX;
sumX = transvalues[1];
sumX2 = transvalues[2];
- /* We define STDDEV of no values to be NULL, of 1 value to be 0 */
- if (N == 0.0)
- PG_RETURN_NULL();
-
+ /* Sample stddev is undefined when N is 0 or 1, so return NULL */
if (N <= 1.0)
- PG_RETURN_FLOAT8(0.0);
+ PG_RETURN_NULL();
numerator = N * sumX2 - sumX * sumX;
* Copyright (c) 1998-2003, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.59 2003/03/21 01:58:04 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.60 2003/04/21 00:22:24 tgl Exp $
*
*-------------------------------------------------------------------------
*/
if (NUMERIC_IS_NAN(N) || NUMERIC_IS_NAN(sumX) || NUMERIC_IS_NAN(sumX2))
PG_RETURN_NUMERIC(make_result(&const_nan));
- /* We define VARIANCE of no values to be NULL, of 1 value to be 0 */
- /* N is zero iff no digits (cf. numeric_uminus) */
- if (N->varlen == NUMERIC_HDRSZ)
- PG_RETURN_NULL();
-
+ /* Sample variance is undefined when N is 0 or 1, so return NULL */
init_var(&vN);
set_var_from_num(N, &vN);
- init_var(&vNminus1);
- sub_var(&vN, &const_one, &vNminus1);
-
- if (cmp_var(&vNminus1, &const_zero) <= 0)
+ if (cmp_var(&vN, &const_one) <= 0)
{
free_var(&vN);
- free_var(&vNminus1);
- PG_RETURN_NUMERIC(make_result(&const_zero));
+ PG_RETURN_NULL();
}
+ init_var(&vNminus1);
+ sub_var(&vN, &const_one, &vNminus1);
+
init_var(&vsumX);
set_var_from_num(sumX, &vsumX);
init_var(&vsumX2);
if (NUMERIC_IS_NAN(N) || NUMERIC_IS_NAN(sumX) || NUMERIC_IS_NAN(sumX2))
PG_RETURN_NUMERIC(make_result(&const_nan));
- /* We define STDDEV of no values to be NULL, of 1 value to be 0 */
- /* N is zero iff no digits (cf. numeric_uminus) */
- if (N->varlen == NUMERIC_HDRSZ)
- PG_RETURN_NULL();
-
+ /* Sample stddev is undefined when N is 0 or 1, so return NULL */
init_var(&vN);
set_var_from_num(N, &vN);
- init_var(&vNminus1);
- sub_var(&vN, &const_one, &vNminus1);
-
- if (cmp_var(&vNminus1, &const_zero) <= 0)
+ if (cmp_var(&vN, &const_one) <= 0)
{
free_var(&vN);
- free_var(&vNminus1);
- PG_RETURN_NUMERIC(make_result(&const_zero));
+ PG_RETURN_NULL();
}
+ init_var(&vNminus1);
+ sub_var(&vN, &const_one, &vNminus1);
+
init_var(&vsumX);
set_var_from_num(sumX, &vsumX);
init_var(&vsumX2);