From 5df20d4449f552225415df2f413b7cda8c54d8f7 Mon Sep 17 00:00:00 2001
From: Jan Wieck <JanWieck@Yahoo.com>
Date: Wed, 30 Dec 1998 20:46:06 +0000
Subject: [PATCH] Little precision fix for POWER(). I discovered problems with
 big exponents.

Jan
---
 src/backend/utils/adt/numeric.c | 8 ++++----
 src/include/utils/numeric.h     | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 185c5dad740..6ee7f6ba2c2 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 a22c77746d3..1b96b86d54c 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)
-- 
GitLab