diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 185c5dad740993d6c76f51688a68e38748b79468..6ee7f6ba2c2a67d975a00829a872ed976fd0075a 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -5,7 +5,7 @@
  *
  *	1998 Jan Wieck
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.1 1998/12/30 19:56:29 wieck Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.2 1998/12/30 20:46:05 wieck Exp $
  *
  * ----------
  */
@@ -3371,9 +3371,9 @@ log_var(NumericVar *base, NumericVar *num, NumericVar *result)
 
 
 /* ----------
- * log_var() -
+ * power_var() -
  *
- *	Compute the logarithm of x in a given base
+ *	Raise base to the power of exp
  * ----------
  */
 static void
@@ -3384,7 +3384,7 @@ power_var(NumericVar *base, NumericVar *exp, NumericVar *result)
 	int			save_global_rscale;
 
 	save_global_rscale = global_rscale;
-	global_rscale += 8 + MAX(0, exp->weight);
+	global_rscale += global_rscale / 3 + 8;
 
 	init_var(&ln_base);
 	init_var(&ln_num);
diff --git a/src/include/utils/numeric.h b/src/include/utils/numeric.h
index a22c77746d32f41d9c9b064159abc8519e86d5d7..1b96b86d54cb79461984d39daa29c6e743d5ad82 100644
--- a/src/include/utils/numeric.h
+++ b/src/include/utils/numeric.h
@@ -5,7 +5,7 @@
  *
  *	1998 Jan Wieck
  *
- * $Header: /cvsroot/pgsql/src/include/utils/numeric.h,v 1.1 1998/12/30 19:56:35 wieck Exp $
+ * $Header: /cvsroot/pgsql/src/include/utils/numeric.h,v 1.2 1998/12/30 20:46:06 wieck Exp $
  *
  * ----------
  */
@@ -27,7 +27,7 @@
 #define	NUMERIC_MAX_DISPLAY_SCALE	NUMERIC_MAX_PRECISION
 #define	NUMERIC_MIN_DISPLAY_SCALE	NUMERIC_DEFAULT_SCALE + 4
 
-#define	NUMERIC_MAX_RESULT_SCALE	(NUMERIC_MAX_PRECISION + 4)
+#define	NUMERIC_MAX_RESULT_SCALE	(NUMERIC_MAX_PRECISION * 2)
 #define NUMERIC_MIN_RESULT_SCALE	(NUMERIC_DEFAULT_PRECISION + 4)
 
 #define NUMERIC_UNPACKED_DATASIZE	(NUMERIC_MAX_PRECISION * 2 + 4)