|
14 | 14 | * Copyright (c) 1998-2003, PostgreSQL Global Development Group |
15 | 15 | * |
16 | 16 | * IDENTIFICATION |
17 | | - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.59 2003/03/2101:58:04 tgl Exp $ |
| 17 | + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.60 2003/04/2100:22:24 tgl Exp $ |
18 | 18 | * |
19 | 19 | *------------------------------------------------------------------------- |
20 | 20 | */ |
@@ -1964,24 +1964,19 @@ numeric_variance(PG_FUNCTION_ARGS) |
1964 | 1964 | if (NUMERIC_IS_NAN(N)||NUMERIC_IS_NAN(sumX)||NUMERIC_IS_NAN(sumX2)) |
1965 | 1965 | PG_RETURN_NUMERIC(make_result(&const_nan)); |
1966 | 1966 |
|
1967 | | -/* We define VARIANCE of no values to be NULL, of 1 value to be 0 */ |
1968 | | -/* N is zero iff no digits (cf. numeric_uminus) */ |
1969 | | -if (N->varlen==NUMERIC_HDRSZ) |
1970 | | -PG_RETURN_NULL(); |
1971 | | - |
| 1967 | +/* Sample variance is undefined when N is 0 or 1, so return NULL */ |
1972 | 1968 | init_var(&vN); |
1973 | 1969 | set_var_from_num(N,&vN); |
1974 | 1970 |
|
1975 | | -init_var(&vNminus1); |
1976 | | -sub_var(&vN,&const_one,&vNminus1); |
1977 | | - |
1978 | | -if (cmp_var(&vNminus1,&const_zero) <=0) |
| 1971 | +if (cmp_var(&vN,&const_one) <=0) |
1979 | 1972 | { |
1980 | 1973 | free_var(&vN); |
1981 | | -free_var(&vNminus1); |
1982 | | -PG_RETURN_NUMERIC(make_result(&const_zero)); |
| 1974 | +PG_RETURN_NULL(); |
1983 | 1975 | } |
1984 | 1976 |
|
| 1977 | +init_var(&vNminus1); |
| 1978 | +sub_var(&vN,&const_one,&vNminus1); |
| 1979 | + |
1985 | 1980 | init_var(&vsumX); |
1986 | 1981 | set_var_from_num(sumX,&vsumX); |
1987 | 1982 | init_var(&vsumX2); |
@@ -2045,24 +2040,19 @@ numeric_stddev(PG_FUNCTION_ARGS) |
2045 | 2040 | if (NUMERIC_IS_NAN(N)||NUMERIC_IS_NAN(sumX)||NUMERIC_IS_NAN(sumX2)) |
2046 | 2041 | PG_RETURN_NUMERIC(make_result(&const_nan)); |
2047 | 2042 |
|
2048 | | -/* We define STDDEV of no values to be NULL, of 1 value to be 0 */ |
2049 | | -/* N is zero iff no digits (cf. numeric_uminus) */ |
2050 | | -if (N->varlen==NUMERIC_HDRSZ) |
2051 | | -PG_RETURN_NULL(); |
2052 | | - |
| 2043 | +/* Sample stddev is undefined when N is 0 or 1, so return NULL */ |
2053 | 2044 | init_var(&vN); |
2054 | 2045 | set_var_from_num(N,&vN); |
2055 | 2046 |
|
2056 | | -init_var(&vNminus1); |
2057 | | -sub_var(&vN,&const_one,&vNminus1); |
2058 | | - |
2059 | | -if (cmp_var(&vNminus1,&const_zero) <=0) |
| 2047 | +if (cmp_var(&vN,&const_one) <=0) |
2060 | 2048 | { |
2061 | 2049 | free_var(&vN); |
2062 | | -free_var(&vNminus1); |
2063 | | -PG_RETURN_NUMERIC(make_result(&const_zero)); |
| 2050 | +PG_RETURN_NULL(); |
2064 | 2051 | } |
2065 | 2052 |
|
| 2053 | +init_var(&vNminus1); |
| 2054 | +sub_var(&vN,&const_one,&vNminus1); |
| 2055 | + |
2066 | 2056 | init_var(&vsumX); |
2067 | 2057 | set_var_from_num(sumX,&vsumX); |
2068 | 2058 | init_var(&vsumX2); |
|