This relates to the recent discussion about floating point output format.
The discussion was at a point where one parameter would be added to specify the number of extra digits used in fp output formatting.
The parameter would have a 0 default value, a maximum of 2 and the minimum remained open for discussion.
In a previous message I proposed that for double precision numbers a minimum value of -13 would be usefful. For single precision numbers this corresponds to a value of -4.
I downloaded the PG sources and added two parameters (as PGC_USERSET):
int extra_float4_digits, default 0, min -4, max 2
int extra_float8_digits, defualt 0, min -13, max 2
Compiled and tested for these functionalities. It is ok.
The afected files are:
src/backend/utils/adt/float.c
src/backend/utils/misc/guc.c
src/bin/psql/tab-complete.c
src/backend/utils/misc/postgresql.conf.sample
I used sources from Debian source package, postgresql_7.2.1-2woody2.
Diff's produced with diff -u are enclosed as attachments.
Can you comment on this (particularly the min values) ?
Also, if we concluded that there is a need of 2 more digits, should'nt this be the default ?
Best regards,
Pedro M. Ferreira
--
----------------------------------------------------------------------
Pedro Miguel Frazao Fernandes Ferreira
Universidade do Algarve
Faculdade de Ciencias e Tecnologia
Campus de Gambelas
8000-117 Faro
Portugal
Tel./Fax: (+351) 289 800950 / 289 819403
http://w3.ualg.pt/~pfrazao
--- old/postgresql-7.2.1/src/backend/utils/adt/float.c Tue Dec 11 02:02:12 2001
+++ postgresql-7.2.1/src/backend/utils/adt/float.c Mon Nov 4 10:32:33 2002
@@ -65,6 +65,12 @@
#include "utils/array.h"
#include "utils/builtins.h"
+/*
+ * Configuration options for float4 and float8 extra digits in output format
+ */
+
+int extra_float4_digits;
+int extra_float8_digits;
#if !(NeXT && NX_CURRENT_COMPILER_RELEASE > NX_COMPILER_RELEASE_3_2)
/* NS3.3 has conflicting declarations of these in <math.h> */
@@ -237,7 +243,7 @@
if (infflag < 0)
PG_RETURN_CSTRING(strcpy(ascii, "-Infinity"));
- sprintf(ascii, "%.*g", FLT_DIG, num);
+ sprintf(ascii, "%.*g", FLT_DIG+extra_float4_digits, num);
PG_RETURN_CSTRING(ascii);
}
@@ -299,7 +305,7 @@
if (infflag < 0)
PG_RETURN_CSTRING(strcpy(ascii, "-Infinity"));
- sprintf(ascii, "%.*g", DBL_DIG, num);
+ sprintf(ascii, "%.*g", DBL_DIG+extra_float8_digits, num);
PG_RETURN_CSTRING(ascii);
}
--- old/postgresql-7.2.1/src/backend/utils/misc/guc.c Tue Oct 30 05:38:56 2001
+++ postgresql-7.2.1/src/backend/utils/misc/guc.c Mon Nov 4 10:53:15 2002
@@ -49,6 +49,11 @@
extern int CommitSiblings;
extern bool FixBTree;
+/* For float4 and float8 extra digits in output format */
+
+extern int extra_float4_digits;
+extern int extra_float8_digits;
+
#ifdef ENABLE_SYSLOG
extern char *Syslog_facility;
extern char *Syslog_ident;
@@ -502,6 +507,19 @@
"commit_siblings", PGC_USERSET, &CommitSiblings,
5, 1, 1000, NULL, NULL
},
+
+ /*
+ * For float4 and float8 extra digits in output format
+ */
+ {
+ "float4_extra_digits", PGC_USERSET, &extra_float4_digits,
+ 0, -4, 2, NULL, NULL
+ },
+
+ {
+ "float8_extra_digits", PGC_USERSET, &extra_float8_digits,
+ 0, -13, 2, NULL, NULL
+ },
{
NULL, 0, NULL, 0, 0, 0, NULL, NULL
--- old/postgresql-7.2.1/src/bin/psql/tab-complete.c Mon Nov 5 17:46:31 2001
+++ postgresql-7.2.1/src/bin/psql/tab-complete.c Mon Nov 4 11:16:01 2002
@@ -266,6 +266,9 @@
"default_transaction_isolation",
+ "float4_extra_digits",
+ "float8_extra_digits",
+
NULL
};
--- old/postgresql-7.2.1/src/backend/utils/misc/postgresql.conf.sample Fri Jan 4 05:50:25 2002 +++ postgresql-7.2.1/src/backend/utils/misc/postgresql.conf.sample Mon Nov 4 +11:02:04 2002 @@ -182,3 +182,9 @@ #password_encryption = false #sql_inheritance = true #transform_null_equals = false + +# +# floating point extra digits in output formatting +# +#extra_float4_digits = 0 #min -4, max 2 +#extra_float8_digits = 0 #min -13, max 2
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
