On Wed, Nov 19, 2025 at 3:13 PM Thomas Munro <[email protected]> wrote: > I was also curious to know if the nearby floating point formatting > kludge added by commit f1885386 was still needed today. CI passes > without it, and the standard is pretty clear: "The exponent always > contains at least two digits, and only as many more digits as > necessary to represent the exponent". I didn't look too closely at > the fine print, but that text was already present in C89 so I guess > MSVCRT just failed to conform on that point.
We can also drop HAVE_BUGGY_STRTOF for MinGW. This passes on CI. That'd leave only Cygwin with HAVE BUGGY_STRTOF. Perhaps they have fixed their implementation[1]? Here's an experimental patch to drop all remnants, which could be used to find out. No Windows/Cygwin here. Hmm, what if we just commit it anyway? If their strtof() is still broken and someone out there is running the tests and sees this test fail, why shouldn't they take that up with libc at this stage? [1] https://github.com/cygwin/cygwin/commit/fb01286fab9b370c86323f84a46285cfbebfe4ff
From fb3f839947441cdcf06c7115f2c7f9ec90a3bee7 Mon Sep 17 00:00:00 2001 From: Thomas Munro <[email protected]> Date: Sun, 23 Nov 2025 12:22:46 +1300 Subject: [PATCH 1/2] Drop HAVE_BUGGY_STRTOF for MinGW. Commit 72880ac182c8 pointed MinGW builds at our replacement strtof() function. This isn't necessary with UCRT. Also remove a stray reference to Visual Studio 2013 (another desupported way to use MSVCRT) from meson.build. --- configure | 9 ++++----- configure.ac | 9 ++++----- src/include/port/win32_port.h | 14 -------------- src/port/meson.build | 11 ++++------- src/test/regress/resultmap | 1 - 5 files changed, 12 insertions(+), 32 deletions(-) diff --git a/configure b/configure index 3a0ed11fa8e..b7bc44b017e 100755 --- a/configure +++ b/configure @@ -16192,11 +16192,10 @@ fi -if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then - # Cygwin and (apparently, based on test results) Mingw both - # have a broken strtof(), so substitute its implementation. - # That's not a perfect fix, since it doesn't avoid double-rounding, - # but we have no better options. +if test "$PORTNAME" = "cygwin"; then + # Cygwin has a broken strtof(), so substitute its implementation. That's + # not a perfect fix, since it doesn't avoid double-rounding, but we have no + # better options. case " $LIBOBJS " in *" strtof.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtof.$ac_objext" diff --git a/configure.ac b/configure.ac index c2413720a18..69a5c0d2e5d 100644 --- a/configure.ac +++ b/configure.ac @@ -1850,11 +1850,10 @@ AC_REPLACE_FUNCS(m4_normalize([ AC_REPLACE_FUNCS(pthread_barrier_wait) -if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then - # Cygwin and (apparently, based on test results) Mingw both - # have a broken strtof(), so substitute its implementation. - # That's not a perfect fix, since it doesn't avoid double-rounding, - # but we have no better options. +if test "$PORTNAME" = "cygwin"; then + # Cygwin has a broken strtof(), so substitute its implementation. That's + # not a perfect fix, since it doesn't avoid double-rounding, but we have no + # better options. AC_LIBOBJ([strtof]) AC_MSG_NOTICE([On $host_os we will use our strtof wrapper.]) fi diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h index f54ccef7db8..2ff54df5811 100644 --- a/src/include/port/win32_port.h +++ b/src/include/port/win32_port.h @@ -569,20 +569,6 @@ typedef unsigned short mode_t; #endif /* _MSC_VER */ -#if defined(__MINGW32__) || defined(__MINGW64__) -/* - * Mingw claims to have a strtof, and my reading of its source code suggests - * that it ought to work (and not need this hack), but the regression test - * results disagree with me; whether this is a version issue or not is not - * clear. However, using our wrapper (and the misrounded-input variant file, - * already required for supporting ancient systems) can't make things any - * worse, except for a tiny performance loss when reading zeros. - * - * See also cygwin.h for another instance of this. - */ -#define HAVE_BUGGY_STRTOF 1 -#endif - /* in port/win32pread.c */ extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, pgoff_t offset); diff --git a/src/port/meson.build b/src/port/meson.build index fc7b059fee5..9eba75a75f7 100644 --- a/src/port/meson.build +++ b/src/port/meson.build @@ -135,13 +135,10 @@ foreach f : replace_funcs_pos endforeach -if (host_system == 'windows' or host_system == 'cygwin') and \ - (cc.get_id() != 'msvc' or cc.version().version_compare('<14.0')) - - # Cygwin and (apparently, based on test results) Mingw both - # have a broken strtof(), so substitute its implementation. - # That's not a perfect fix, since it doesn't avoid double-rounding, - # but we have no better options. +if host_system == 'cygwin' + # Cygwin has a broken strtof(), so substitute its implementation. That's not + # a perfect fix, since it doesn't avoid double-rounding, but we have no + # better options. pgport_sources += files('strtof.c') message('On @0@ with compiler @1@ @2@ we will use our strtof wrapper.'.format( host_system, cc.get_id(), cc.version())) diff --git a/src/test/regress/resultmap b/src/test/regress/resultmap index 8a3ed50585e..9ccc08c7cf3 100644 --- a/src/test/regress/resultmap +++ b/src/test/regress/resultmap @@ -1,2 +1 @@ float4:out:.*-.*-cygwin.*=float4-misrounded-input.out -float4:out:.*-.*-mingw.*=float4-misrounded-input.out -- 2.51.2
From 5fecb2e1345f7e8e1d24f8c5787d046e2890fde0 Mon Sep 17 00:00:00 2001 From: Thomas Munro <[email protected]> Date: Sun, 23 Nov 2025 13:17:59 +1300 Subject: [PATCH 2/2] Drop HAVE_BUGGY_STRTOF for Cygwin. Also drop the fallback code and alternative test output. Cygwin's strtof() might have been fixed: https://github.com/cygwin/cygwin/commit/fb01286fab9b370c86323f84a46285cfbebfe4ff If it is still broken, then an interested party should file a report against Cygwin's strtof(). Cygwin is not currently tested in our build farm. --- configure | 14 - configure.ac | 8 - doc/src/sgml/regress.sgml | 18 - src/include/port.h | 5 - src/include/port/cygwin.h | 8 - src/port/meson.build | 11 - src/port/strtof.c | 89 -- .../expected/float4-misrounded-input.out | 988 ------------------ src/test/regress/resultmap | 1 - 9 files changed, 1142 deletions(-) delete mode 100644 src/port/strtof.c delete mode 100644 src/test/regress/expected/float4-misrounded-input.out diff --git a/configure b/configure index b7bc44b017e..1c63d5388fc 100755 --- a/configure +++ b/configure @@ -16192,20 +16192,6 @@ fi -if test "$PORTNAME" = "cygwin"; then - # Cygwin has a broken strtof(), so substitute its implementation. That's - # not a perfect fix, since it doesn't avoid double-rounding, but we have no - # better options. - case " $LIBOBJS " in - *" strtof.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strtof.$ac_objext" - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: On $host_os we will use our strtof wrapper." >&5 -$as_echo "$as_me: On $host_os we will use our strtof wrapper." >&6;} -fi - # Similarly, use system's getopt_long() only if system provides struct option. if test x"$ac_cv_type_struct_option" = xyes ; then ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" diff --git a/configure.ac b/configure.ac index 69a5c0d2e5d..d347b17329f 100644 --- a/configure.ac +++ b/configure.ac @@ -1850,14 +1850,6 @@ AC_REPLACE_FUNCS(m4_normalize([ AC_REPLACE_FUNCS(pthread_barrier_wait) -if test "$PORTNAME" = "cygwin"; then - # Cygwin has a broken strtof(), so substitute its implementation. That's - # not a perfect fix, since it doesn't avoid double-rounding, but we have no - # better options. - AC_LIBOBJ([strtof]) - AC_MSG_NOTICE([On $host_os we will use our strtof wrapper.]) -fi - # Similarly, use system's getopt_long() only if system provides struct option. if test x"$ac_cv_type_struct_option" = xyes ; then AC_REPLACE_FUNCS([getopt_long]) diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml index fd1e142d559..160f38bef9e 100644 --- a/doc/src/sgml/regress.sgml +++ b/doc/src/sgml/regress.sgml @@ -784,24 +784,6 @@ testname:output:platformpattern=comparisonfilename comparison file. </para> - <para> - For example: some systems lack a working <literal>strtof</literal> function, - for which our workaround causes rounding errors in the - <filename>float4</filename> regression test. - Therefore, we provide a variant comparison file, - <filename>float4-misrounded-input.out</filename>, which includes - the results to be expected on these systems. To silence the bogus - <quote>failure</quote> message on <systemitem>Cygwin</systemitem> - platforms, <filename>resultmap</filename> includes: -<programlisting> -float4:out:.*-.*-cygwin.*=float4-misrounded-input.out -</programlisting> - which will trigger on any machine where the output of - <command>config.guess</command> matches <literal>.*-.*-cygwin.*</literal>. - Other lines in <filename>resultmap</filename> select the variant comparison - file for other platforms where it's appropriate. - </para> - <para> The second selection mechanism for variant comparison files is much more automatic: it simply uses the <quote>best match</quote> among diff --git a/src/include/port.h b/src/include/port.h index 3964d3b1293..8e6a5ac4671 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -428,11 +428,6 @@ extern int getpeereid(int sock, uid_t *uid, gid_t *gid); extern void explicit_bzero(void *buf, size_t len); #endif -#ifdef HAVE_BUGGY_STRTOF -extern float pg_strtof(const char *nptr, char **endptr); -#define strtof(a,b) (pg_strtof((a),(b))) -#endif - #ifdef WIN32 /* src/port/win32link.c */ extern int link(const char *src, const char *dst); diff --git a/src/include/port/cygwin.h b/src/include/port/cygwin.h index 44bf8533729..aa07b8c12a9 100644 --- a/src/include/port/cygwin.h +++ b/src/include/port/cygwin.h @@ -13,11 +13,3 @@ #define PGDLLIMPORT __declspec (dllimport) #endif #endif - -/* - * Cygwin has a strtof() which is literally just (float)strtod(), which means - * we get misrounding _and_ silent over/underflow. Using our wrapper doesn't - * fix the misrounding but does fix the error checks, which cuts down on the - * number of test variant files needed. - */ -#define HAVE_BUGGY_STRTOF 1 diff --git a/src/port/meson.build b/src/port/meson.build index 9eba75a75f7..bf3f03770b4 100644 --- a/src/port/meson.build +++ b/src/port/meson.build @@ -135,17 +135,6 @@ foreach f : replace_funcs_pos endforeach -if host_system == 'cygwin' - # Cygwin has a broken strtof(), so substitute its implementation. That's not - # a perfect fix, since it doesn't avoid double-rounding, but we have no - # better options. - pgport_sources += files('strtof.c') - message('On @0@ with compiler @1@ @2@ we will use our strtof wrapper.'.format( - host_system, cc.get_id(), cc.version())) -endif - - - # Build pgport once for backend, once for use in frontend binaries, and once # for use in shared libraries pgport = {} diff --git a/src/port/strtof.c b/src/port/strtof.c deleted file mode 100644 index e7258b3d6db..00000000000 --- a/src/port/strtof.c +++ /dev/null @@ -1,89 +0,0 @@ -/*------------------------------------------------------------------------- - * - * strtof.c - * - * Portions Copyright (c) 2019-2025, PostgreSQL Global Development Group - * - * - * IDENTIFICATION - * src/port/strtof.c - * - *------------------------------------------------------------------------- - */ - -#include "c.h" - -#include <float.h> -#include <math.h> - - -/* - * Cygwin has a strtof() which is literally just (float)strtod(), which means - * we can't avoid the double-rounding problem; but using this wrapper does get - * us proper over/underflow checks. (Also, if they fix their strtof(), the - * wrapper doesn't break anything.) - * - * Test results on Mingw suggest that it has the same problem, though looking - * at the code I can't figure out why. - */ -float -pg_strtof(const char *nptr, char **endptr) -{ - int caller_errno = errno; - float fresult; - char *myendptr; - - errno = 0; - fresult = (strtof) (nptr, &myendptr); - if (endptr) - *endptr = myendptr; - if (errno) - { - /* On error, just return the error to the caller. */ - return fresult; - } - else if ((myendptr == nptr) || isnan(fresult) || - ((fresult >= FLT_MIN || fresult <= -FLT_MIN) && !isinf(fresult))) - { - /* - * If we got nothing parseable, or if we got a non-0 non-subnormal - * finite value (or NaN) without error, then return that to the caller - * without error. - */ - errno = caller_errno; - return fresult; - } - else - { - /* - * Try again. errno is already 0 here, and we assume that the endptr - * won't be any different. - */ - double dresult = strtod(nptr, NULL); - - if (errno) - { - /* On error, just return the error */ - return fresult; - } - else if ((dresult == 0.0 && fresult == 0.0) || - (isinf(dresult) && isinf(fresult) && (fresult == dresult))) - { - /* both values are 0 or infinities of the same sign */ - errno = caller_errno; - return fresult; - } - else if ((dresult > 0 && dresult <= FLT_MIN && (float) dresult != 0.0) || - (dresult < 0 && dresult >= -FLT_MIN && (float) dresult != 0.0)) - { - /* subnormal but nonzero value */ - errno = caller_errno; - return (float) dresult; - } - else - { - errno = ERANGE; - return fresult; - } - } -} diff --git a/src/test/regress/expected/float4-misrounded-input.out b/src/test/regress/expected/float4-misrounded-input.out deleted file mode 100644 index 61c68a6c9ff..00000000000 --- a/src/test/regress/expected/float4-misrounded-input.out +++ /dev/null @@ -1,988 +0,0 @@ --- --- FLOAT4 --- -CREATE TABLE FLOAT4_TBL (f1 float4); -INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0'); -INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 '); -INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 '); -INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20'); -INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20'); --- test for over and under flow -INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'); -ERROR: "10e70" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'); -ERROR: "-10e70" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'); -ERROR: "10e-70" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'); -ERROR: "-10e-70" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8); -ERROR: value out of range: overflow -INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8); -ERROR: value out of range: overflow -INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8); -ERROR: value out of range: underflow -INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8); -ERROR: value out of range: underflow -INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400'); -ERROR: "10e400" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400'); -ERROR: "-10e400" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400'); -ERROR: "10e-400" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400'); -ERROR: "-10e-400" is out of range for type real -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400'); - ^ --- bad input -INSERT INTO FLOAT4_TBL(f1) VALUES (''); -ERROR: invalid input syntax for type real: "" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES (''); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES (' '); -ERROR: invalid input syntax for type real: " " -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES (' '); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz'); -ERROR: invalid input syntax for type real: "xyz" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0'); -ERROR: invalid input syntax for type real: "5.0.0" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0'); -ERROR: invalid input syntax for type real: "5 . 0" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0'); -ERROR: invalid input syntax for type real: "5. 0" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0'); -ERROR: invalid input syntax for type real: " - 3.0" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0'); - ^ -INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5'); -ERROR: invalid input syntax for type real: "123 5" -LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5'); - ^ --- Also try it with non-error-throwing API -SELECT pg_input_is_valid('34.5', 'float4'); - pg_input_is_valid -------------------- - t -(1 row) - -SELECT pg_input_is_valid('xyz', 'float4'); - pg_input_is_valid -------------------- - f -(1 row) - -SELECT pg_input_is_valid('1e400', 'float4'); - pg_input_is_valid -------------------- - f -(1 row) - -SELECT * FROM pg_input_error_info('1e400', 'float4'); - message | detail | hint | sql_error_code ----------------------------------------+--------+------+---------------- - "1e400" is out of range for type real | | | 22003 -(1 row) - --- special inputs -SELECT 'NaN'::float4; - float4 --------- - NaN -(1 row) - -SELECT 'nan'::float4; - float4 --------- - NaN -(1 row) - -SELECT ' NAN '::float4; - float4 --------- - NaN -(1 row) - -SELECT 'infinity'::float4; - float4 ----------- - Infinity -(1 row) - -SELECT ' -INFINiTY '::float4; - float4 ------------ - -Infinity -(1 row) - --- bad special inputs -SELECT 'N A N'::float4; -ERROR: invalid input syntax for type real: "N A N" -LINE 1: SELECT 'N A N'::float4; - ^ -SELECT 'NaN x'::float4; -ERROR: invalid input syntax for type real: "NaN x" -LINE 1: SELECT 'NaN x'::float4; - ^ -SELECT ' INFINITY x'::float4; -ERROR: invalid input syntax for type real: " INFINITY x" -LINE 1: SELECT ' INFINITY x'::float4; - ^ -SELECT 'Infinity'::float4 + 100.0; - ?column? ----------- - Infinity -(1 row) - -SELECT 'Infinity'::float4 / 'Infinity'::float4; - ?column? ----------- - NaN -(1 row) - -SELECT '42'::float4 / 'Infinity'::float4; - ?column? ----------- - 0 -(1 row) - -SELECT 'nan'::float4 / 'nan'::float4; - ?column? ----------- - NaN -(1 row) - -SELECT 'nan'::float4 / '0'::float4; - ?column? ----------- - NaN -(1 row) - -SELECT 'nan'::numeric::float4; - float4 --------- - NaN -(1 row) - -SELECT * FROM FLOAT4_TBL; - f1 ---------------- - 0 - 1004.3 - -34.84 - 1.2345679e+20 - 1.2345679e-20 -(5 rows) - -SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3'; - f1 ---------------- - 0 - -34.84 - 1.2345679e+20 - 1.2345679e-20 -(4 rows) - -SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3'; - f1 --------- - 1004.3 -(1 row) - -SELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1; - f1 ---------------- - 0 - -34.84 - 1.2345679e-20 -(3 rows) - -SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3'; - f1 ---------------- - 0 - -34.84 - 1.2345679e-20 -(3 rows) - -SELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1; - f1 ---------------- - 0 - 1004.3 - -34.84 - 1.2345679e-20 -(4 rows) - -SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3'; - f1 ---------------- - 0 - 1004.3 - -34.84 - 1.2345679e-20 -(4 rows) - -SELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f - WHERE f.f1 > '0.0'; - f1 | x ----------------+---------------- - 1004.3 | -10043 - 1.2345679e+20 | -1.2345678e+21 - 1.2345679e-20 | -1.2345678e-19 -(3 rows) - -SELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f - WHERE f.f1 > '0.0'; - f1 | x ----------------+--------------- - 1004.3 | 994.3 - 1.2345679e+20 | 1.2345679e+20 - 1.2345679e-20 | -10 -(3 rows) - -SELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f - WHERE f.f1 > '0.0'; - f1 | x ----------------+---------------- - 1004.3 | -100.43 - 1.2345679e+20 | -1.2345679e+19 - 1.2345679e-20 | -1.2345679e-21 -(3 rows) - -SELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f - WHERE f.f1 > '0.0'; - f1 | x ----------------+--------------- - 1004.3 | 1014.3 - 1.2345679e+20 | 1.2345679e+20 - 1.2345679e-20 | 10 -(3 rows) - --- test divide by zero -SELECT f.f1 / '0.0' from FLOAT4_TBL f; -ERROR: division by zero -SELECT * FROM FLOAT4_TBL; - f1 ---------------- - 0 - 1004.3 - -34.84 - 1.2345679e+20 - 1.2345679e-20 -(5 rows) - --- test the unary float4abs operator -SELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f; - f1 | abs_f1 ----------------+--------------- - 0 | 0 - 1004.3 | 1004.3 - -34.84 | 34.84 - 1.2345679e+20 | 1.2345679e+20 - 1.2345679e-20 | 1.2345679e-20 -(5 rows) - -UPDATE FLOAT4_TBL - SET f1 = FLOAT4_TBL.f1 * '-1' - WHERE FLOAT4_TBL.f1 > '0.0'; -SELECT * FROM FLOAT4_TBL ORDER BY 1; - f1 ----------------- - -1.2345679e+20 - -1004.3 - -34.84 - -1.2345679e-20 - 0 -(5 rows) - --- test edge-case coercions to integer -SELECT '32767.4'::float4::int2; - int2 -------- - 32767 -(1 row) - -SELECT '32767.6'::float4::int2; -ERROR: smallint out of range -SELECT '-32768.4'::float4::int2; - int2 --------- - -32768 -(1 row) - -SELECT '-32768.6'::float4::int2; -ERROR: smallint out of range -SELECT '2147483520'::float4::int4; - int4 ------------- - 2147483520 -(1 row) - -SELECT '2147483647'::float4::int4; -ERROR: integer out of range -SELECT '-2147483648.5'::float4::int4; - int4 -------------- - -2147483648 -(1 row) - -SELECT '-2147483900'::float4::int4; -ERROR: integer out of range -SELECT '9223369837831520256'::float4::int8; - int8 ---------------------- - 9223369837831520256 -(1 row) - -SELECT '9223372036854775807'::float4::int8; -ERROR: bigint out of range -SELECT '-9223372036854775808.5'::float4::int8; - int8 ----------------------- - -9223372036854775808 -(1 row) - -SELECT '-9223380000000000000'::float4::int8; -ERROR: bigint out of range --- Test for correct input rounding in edge cases. --- These lists are from Paxson 1991, excluding subnormals and --- inputs of over 9 sig. digits. -SELECT float4send('5e-20'::float4); - float4send ------------- - \x1f6c1e4a -(1 row) - -SELECT float4send('67e14'::float4); - float4send ------------- - \x59be6cea -(1 row) - -SELECT float4send('985e15'::float4); - float4send ------------- - \x5d5ab6c4 -(1 row) - -SELECT float4send('55895e-16'::float4); - float4send ------------- - \x2cc4a9bd -(1 row) - -SELECT float4send('7038531e-32'::float4); - float4send ------------- - \x15ae43fe -(1 row) - -SELECT float4send('702990899e-20'::float4); - float4send ------------- - \x2cf757ca -(1 row) - -SELECT float4send('3e-23'::float4); - float4send ------------- - \x1a111234 -(1 row) - -SELECT float4send('57e18'::float4); - float4send ------------- - \x6045c22c -(1 row) - -SELECT float4send('789e-35'::float4); - float4send ------------- - \x0a23de70 -(1 row) - -SELECT float4send('2539e-18'::float4); - float4send ------------- - \x2736f449 -(1 row) - -SELECT float4send('76173e28'::float4); - float4send ------------- - \x7616398a -(1 row) - -SELECT float4send('887745e-11'::float4); - float4send ------------- - \x3714f05c -(1 row) - -SELECT float4send('5382571e-37'::float4); - float4send ------------- - \x0d2eaca7 -(1 row) - -SELECT float4send('82381273e-35'::float4); - float4send ------------- - \x128289d0 -(1 row) - -SELECT float4send('750486563e-38'::float4); - float4send ------------- - \x0f18377e -(1 row) - --- Test that the smallest possible normalized input value inputs --- correctly, either in 9-significant-digit or shortest-decimal --- format. --- --- exact val is 1.1754943508... --- shortest val is 1.1754944000 --- midpoint to next val is 1.1754944208... -SELECT float4send('1.17549435e-38'::float4); - float4send ------------- - \x00800000 -(1 row) - -SELECT float4send('1.1754944e-38'::float4); - float4send ------------- - \x00800000 -(1 row) - --- test output (and round-trip safety) of various values. --- To ensure we're testing what we think we're testing, start with --- float values specified by bit patterns (as a useful side effect, --- this means we'll fail on non-IEEE platforms). -create type xfloat4; -create function xfloat4in(cstring) returns xfloat4 immutable strict - language internal as 'int4in'; -NOTICE: return type xfloat4 is only a shell -create function xfloat4out(xfloat4) returns cstring immutable strict - language internal as 'int4out'; -NOTICE: argument type xfloat4 is only a shell -LINE 1: create function xfloat4out(xfloat4) returns cstring immutabl... - ^ -create type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4); -create cast (xfloat4 as float4) without function; -create cast (float4 as xfloat4) without function; -create cast (xfloat4 as integer) without function; -create cast (integer as xfloat4) without function; --- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm --- we don't care to assume the platform's strtod() handles subnormals --- correctly; those are "use at your own risk". However we do test --- subnormal outputs, since those are under our control. -with testdata(bits) as (values - -- small subnormals - (x'00000001'), - (x'00000002'), (x'00000003'), - (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'), - (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'), - -- stress values - (x'0053c4f4'), -- 7693e-42 - (x'006c85c4'), -- 996622e-44 - (x'0041ca76'), -- 60419369e-46 - (x'004b7678'), -- 6930161142e-48 - -- taken from upstream testsuite - (x'00000007'), - (x'00424fe2'), - -- borderline between subnormal and normal - (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff')) -select float4send(flt) as ibits, - flt - from (select bits::integer::xfloat4::float4 as flt - from testdata - offset 0) s; - ibits | flt -------------+--------------- - \x00000001 | 1e-45 - \x00000002 | 3e-45 - \x00000003 | 4e-45 - \x00000010 | 2.2e-44 - \x00000011 | 2.4e-44 - \x00000100 | 3.59e-43 - \x00000101 | 3.6e-43 - \x00004000 | 2.2959e-41 - \x00004001 | 2.296e-41 - \x00080000 | 7.34684e-40 - \x00080001 | 7.34685e-40 - \x0053c4f4 | 7.693e-39 - \x006c85c4 | 9.96622e-39 - \x0041ca76 | 6.041937e-39 - \x004b7678 | 6.930161e-39 - \x00000007 | 1e-44 - \x00424fe2 | 6.0898e-39 - \x007ffff0 | 1.1754921e-38 - \x007ffff1 | 1.1754922e-38 - \x007ffffe | 1.1754941e-38 - \x007fffff | 1.1754942e-38 -(21 rows) - -with testdata(bits) as (values - (x'00000000'), - -- smallest normal values - (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'), - (x'00800006'), - -- small normal values chosen for short vs. long output - (x'008002f1'), (x'008002f2'), (x'008002f3'), - (x'00800e17'), (x'00800e18'), (x'00800e19'), - -- assorted values (random mantissae) - (x'01000001'), (x'01102843'), (x'01a52c98'), - (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'), - (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'), - (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'), - (x'1f850283'), (x'2874a9d6'), - -- values around 5e-08 - (x'3356bf94'), (x'3356bf95'), (x'3356bf96'), - -- around 1e-07 - (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'), - -- around 3e-07 .. 1e-04 - (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'), - (x'350637bc'), (x'350637bd'), (x'350637be'), - (x'35719786'), (x'35719787'), (x'35719788'), - (x'358637bc'), (x'358637bd'), (x'358637be'), - (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'), - (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'), - -- format crossover at 1e-04 - (x'38d1b714'), (x'38d1b715'), (x'38d1b716'), - (x'38d1b717'), (x'38d1b718'), (x'38d1b719'), - (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'), - (x'38d1b71d'), - -- - (x'38dffffe'), (x'38dfffff'), (x'38e00000'), - (x'38efffff'), (x'38f00000'), (x'38f00001'), - (x'3a83126e'), (x'3a83126f'), (x'3a831270'), - (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'), - (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'), - -- chosen to need 9 digits for 3dcccd70 - (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'), - -- - (x'3effffff'), (x'3f000000'), (x'3f000001'), - (x'3f333332'), (x'3f333333'), (x'3f333334'), - -- approach 1.0 with increasing numbers of 9s - (x'3f666665'), (x'3f666666'), (x'3f666667'), - (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'), - (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'), - (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'), - (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'), - (x'3f7fffee'), (x'3f7fffef'), - -- values very close to 1 - (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'), - (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'), - (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'), - (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'), - (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'), - (x'3f7fffff'), - (x'3f800000'), - (x'3f800001'), (x'3f800002'), (x'3f800003'), - (x'3f800004'), (x'3f800005'), (x'3f800006'), - (x'3f800007'), (x'3f800008'), (x'3f800009'), - -- values 1 to 1.1 - (x'3f80000f'), (x'3f800010'), (x'3f800011'), - (x'3f800012'), (x'3f800013'), (x'3f800014'), - (x'3f800017'), (x'3f800018'), (x'3f800019'), - (x'3f80001a'), (x'3f80001b'), (x'3f80001c'), - (x'3f800029'), (x'3f80002a'), (x'3f80002b'), - (x'3f800053'), (x'3f800054'), (x'3f800055'), - (x'3f800346'), (x'3f800347'), (x'3f800348'), - (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'), - (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'), - (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'), - -- - (x'3fc90fdb'), -- pi/2 - (x'402df854'), -- e - (x'40490fdb'), -- pi - -- - (x'409fffff'), (x'40a00000'), (x'40a00001'), - (x'40afffff'), (x'40b00000'), (x'40b00001'), - (x'411fffff'), (x'41200000'), (x'41200001'), - (x'42c7ffff'), (x'42c80000'), (x'42c80001'), - (x'4479ffff'), (x'447a0000'), (x'447a0001'), - (x'461c3fff'), (x'461c4000'), (x'461c4001'), - (x'47c34fff'), (x'47c35000'), (x'47c35001'), - (x'497423ff'), (x'49742400'), (x'49742401'), - (x'4b18967f'), (x'4b189680'), (x'4b189681'), - (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'), - (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'), - (x'501502f8'), (x'501502f9'), (x'501502fa'), - (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'), - -- stress values - (x'1f6c1e4a'), -- 5e-20 - (x'59be6cea'), -- 67e14 - (x'5d5ab6c4'), -- 985e15 - (x'2cc4a9bd'), -- 55895e-16 - (x'15ae43fd'), -- 7038531e-32 - (x'2cf757ca'), -- 702990899e-20 - (x'665ba998'), -- 25933168707e13 - (x'743c3324'), -- 596428896559e20 - -- exercise fixed-point memmoves - (x'47f1205a'), - (x'4640e6ae'), - (x'449a5225'), - (x'42f6e9d5'), - (x'414587dd'), - (x'3f9e064b'), - -- these cases come from the upstream's testsuite - -- BoundaryRoundEven - (x'4c000004'), - (x'50061c46'), - (x'510006a8'), - -- ExactValueRoundEven - (x'48951f84'), - (x'45fd1840'), - -- LotsOfTrailingZeros - (x'39800000'), - (x'3b200000'), - (x'3b900000'), - (x'3bd00000'), - -- Regression - (x'63800000'), - (x'4b000000'), - (x'4b800000'), - (x'4c000001'), - (x'4c800b0d'), - (x'00d24584'), - (x'00d90b88'), - (x'45803f34'), - (x'4f9f24f7'), - (x'3a8722c3'), - (x'5c800041'), - (x'15ae43fd'), - (x'5d4cccfb'), - (x'4c800001'), - (x'57800ed8'), - (x'5f000000'), - (x'700000f0'), - (x'5f23e9ac'), - (x'5e9502f9'), - (x'5e8012b1'), - (x'3c000028'), - (x'60cde861'), - (x'03aa2a50'), - (x'43480000'), - (x'4c000000'), - -- LooksLikePow5 - (x'5D1502F9'), - (x'5D9502F9'), - (x'5E1502F9'), - -- OutputLength - (x'3f99999a'), - (x'3f9d70a4'), - (x'3f9df3b6'), - (x'3f9e0419'), - (x'3f9e0610'), - (x'3f9e064b'), - (x'3f9e0651'), - (x'03d20cfe') -) -select float4send(flt) as ibits, - flt, - flt::text::float4 as r_flt, - float4send(flt::text::float4) as obits, - float4send(flt::text::float4) = float4send(flt) as correct - from (select bits::integer::xfloat4::float4 as flt - from testdata - offset 0) s; - ibits | flt | r_flt | obits | correct -------------+----------------+----------------+------------+--------- - \x00000000 | 0 | 0 | \x00000000 | t - \x00800000 | 1.1754944e-38 | 1.1754944e-38 | \x00800000 | t - \x00800001 | 1.1754945e-38 | 1.1754945e-38 | \x00800001 | t - \x00800004 | 1.1754949e-38 | 1.1754949e-38 | \x00800004 | t - \x00800005 | 1.175495e-38 | 1.175495e-38 | \x00800005 | t - \x00800006 | 1.1754952e-38 | 1.1754952e-38 | \x00800006 | t - \x008002f1 | 1.1755999e-38 | 1.1755999e-38 | \x008002f1 | t - \x008002f2 | 1.1756e-38 | 1.1756e-38 | \x008002f2 | t - \x008002f3 | 1.1756001e-38 | 1.1756001e-38 | \x008002f3 | t - \x00800e17 | 1.1759998e-38 | 1.1759998e-38 | \x00800e17 | t - \x00800e18 | 1.176e-38 | 1.176e-38 | \x00800e18 | t - \x00800e19 | 1.1760001e-38 | 1.1760001e-38 | \x00800e19 | t - \x01000001 | 2.350989e-38 | 2.350989e-38 | \x01000001 | t - \x01102843 | 2.647751e-38 | 2.647751e-38 | \x01102843 | t - \x01a52c98 | 6.0675416e-38 | 6.0675416e-38 | \x01a52c98 | t - \x0219c229 | 1.1296386e-37 | 1.1296386e-37 | \x0219c229 | t - \x02e4464d | 3.354194e-37 | 3.354194e-37 | \x02e4464d | t - \x037343c1 | 7.148906e-37 | 7.148906e-37 | \x037343c1 | t - \x03a91b36 | 9.939175e-37 | 9.939175e-37 | \x03a91b36 | t - \x047ada65 | 2.948764e-36 | 2.948764e-36 | \x047ada65 | t - \x0496fe87 | 3.5498577e-36 | 3.5498577e-36 | \x0496fe87 | t - \x0550844f | 9.804414e-36 | 9.804414e-36 | \x0550844f | t - \x05999da3 | 1.4445957e-35 | 1.4445957e-35 | \x05999da3 | t - \x060ea5e2 | 2.6829103e-35 | 2.6829103e-35 | \x060ea5e2 | t - \x06e63c45 | 8.660494e-35 | 8.660494e-35 | \x06e63c45 | t - \x07f1e548 | 3.639641e-34 | 3.639641e-34 | \x07f1e548 | t - \x0fc5282b | 1.9441172e-29 | 1.9441172e-29 | \x0fc5282b | t - \x1f850283 | 5.6331846e-20 | 5.6331846e-20 | \x1f850283 | t - \x2874a9d6 | 1.3581548e-14 | 1.3581548e-14 | \x2874a9d6 | t - \x3356bf94 | 4.9999997e-08 | 4.9999997e-08 | \x3356bf94 | t - \x3356bf95 | 5e-08 | 5e-08 | \x3356bf95 | t - \x3356bf96 | 5.0000004e-08 | 5.0000004e-08 | \x3356bf96 | t - \x33d6bf94 | 9.9999994e-08 | 9.9999994e-08 | \x33d6bf94 | t - \x33d6bf95 | 1e-07 | 1e-07 | \x33d6bf95 | t - \x33d6bf96 | 1.0000001e-07 | 1.0000001e-07 | \x33d6bf96 | t - \x34a10faf | 2.9999998e-07 | 2.9999998e-07 | \x34a10faf | t - \x34a10fb0 | 3e-07 | 3e-07 | \x34a10fb0 | t - \x34a10fb1 | 3.0000004e-07 | 3.0000004e-07 | \x34a10fb1 | t - \x350637bc | 4.9999994e-07 | 4.9999994e-07 | \x350637bc | t - \x350637bd | 5e-07 | 5e-07 | \x350637bd | t - \x350637be | 5.0000006e-07 | 5.0000006e-07 | \x350637be | t - \x35719786 | 8.999999e-07 | 8.999999e-07 | \x35719786 | t - \x35719787 | 9e-07 | 9e-07 | \x35719787 | t - \x35719788 | 9.0000003e-07 | 9.0000003e-07 | \x35719788 | t - \x358637bc | 9.999999e-07 | 9.999999e-07 | \x358637bc | t - \x358637bd | 1e-06 | 1e-06 | \x358637bd | t - \x358637be | 1.0000001e-06 | 1.0000001e-06 | \x358637be | t - \x36a7c5ab | 4.9999994e-06 | 4.9999994e-06 | \x36a7c5ab | t - \x36a7c5ac | 5e-06 | 5e-06 | \x36a7c5ac | t - \x36a7c5ad | 5.0000003e-06 | 5.0000003e-06 | \x36a7c5ad | t - \x3727c5ab | 9.999999e-06 | 9.999999e-06 | \x3727c5ab | t - \x3727c5ac | 1e-05 | 1e-05 | \x3727c5ac | t - \x3727c5ad | 1.0000001e-05 | 1.0000001e-05 | \x3727c5ad | t - \x38d1b714 | 9.9999976e-05 | 9.9999976e-05 | \x38d1b714 | t - \x38d1b715 | 9.999998e-05 | 9.999998e-05 | \x38d1b715 | t - \x38d1b716 | 9.999999e-05 | 9.999999e-05 | \x38d1b716 | t - \x38d1b717 | 0.0001 | 0.0001 | \x38d1b717 | t - \x38d1b718 | 0.000100000005 | 0.000100000005 | \x38d1b718 | t - \x38d1b719 | 0.00010000001 | 0.00010000001 | \x38d1b719 | t - \x38d1b71a | 0.00010000002 | 0.00010000002 | \x38d1b71a | t - \x38d1b71b | 0.00010000003 | 0.00010000003 | \x38d1b71b | t - \x38d1b71c | 0.000100000034 | 0.000100000034 | \x38d1b71c | t - \x38d1b71d | 0.00010000004 | 0.00010000004 | \x38d1b71d | t - \x38dffffe | 0.00010681151 | 0.00010681151 | \x38dffffe | t - \x38dfffff | 0.000106811516 | 0.000106811516 | \x38dfffff | t - \x38e00000 | 0.00010681152 | 0.00010681152 | \x38e00000 | t - \x38efffff | 0.00011444091 | 0.00011444091 | \x38efffff | t - \x38f00000 | 0.00011444092 | 0.00011444092 | \x38f00000 | t - \x38f00001 | 0.000114440925 | 0.000114440925 | \x38f00001 | t - \x3a83126e | 0.0009999999 | 0.0009999999 | \x3a83126e | t - \x3a83126f | 0.001 | 0.001 | \x3a83126f | t - \x3a831270 | 0.0010000002 | 0.0010000002 | \x3a831270 | t - \x3c23d709 | 0.009999999 | 0.009999999 | \x3c23d709 | t - \x3c23d70a | 0.01 | 0.01 | \x3c23d70a | t - \x3c23d70b | 0.010000001 | 0.010000001 | \x3c23d70b | t - \x3dcccccc | 0.099999994 | 0.099999994 | \x3dcccccc | t - \x3dcccccd | 0.1 | 0.1 | \x3dcccccd | t - \x3dccccce | 0.10000001 | 0.10000001 | \x3dccccce | t - \x3dcccd6f | 0.10000121 | 0.10000121 | \x3dcccd6f | t - \x3dcccd70 | 0.100001216 | 0.100001216 | \x3dcccd70 | t - \x3dcccd71 | 0.10000122 | 0.10000122 | \x3dcccd71 | t - \x3effffff | 0.49999997 | 0.49999997 | \x3effffff | t - \x3f000000 | 0.5 | 0.5 | \x3f000000 | t - \x3f000001 | 0.50000006 | 0.50000006 | \x3f000001 | t - \x3f333332 | 0.6999999 | 0.6999999 | \x3f333332 | t - \x3f333333 | 0.7 | 0.7 | \x3f333333 | t - \x3f333334 | 0.70000005 | 0.70000005 | \x3f333334 | t - \x3f666665 | 0.8999999 | 0.8999999 | \x3f666665 | t - \x3f666666 | 0.9 | 0.9 | \x3f666666 | t - \x3f666667 | 0.90000004 | 0.90000004 | \x3f666667 | t - \x3f7d70a3 | 0.98999995 | 0.98999995 | \x3f7d70a3 | t - \x3f7d70a4 | 0.99 | 0.99 | \x3f7d70a4 | t - \x3f7d70a5 | 0.99000007 | 0.99000007 | \x3f7d70a5 | t - \x3f7fbe76 | 0.99899995 | 0.99899995 | \x3f7fbe76 | t - \x3f7fbe77 | 0.999 | 0.999 | \x3f7fbe77 | t - \x3f7fbe78 | 0.9990001 | 0.9990001 | \x3f7fbe78 | t - \x3f7ff971 | 0.9998999 | 0.9998999 | \x3f7ff971 | t - \x3f7ff972 | 0.9999 | 0.9999 | \x3f7ff972 | t - \x3f7ff973 | 0.99990004 | 0.99990004 | \x3f7ff973 | t - \x3f7fff57 | 0.9999899 | 0.9999899 | \x3f7fff57 | t - \x3f7fff58 | 0.99999 | 0.99999 | \x3f7fff58 | t - \x3f7fff59 | 0.99999005 | 0.99999005 | \x3f7fff59 | t - \x3f7fffee | 0.9999989 | 0.9999989 | \x3f7fffee | t - \x3f7fffef | 0.999999 | 0.999999 | \x3f7fffef | t - \x3f7ffff0 | 0.99999905 | 0.99999905 | \x3f7ffff0 | t - \x3f7ffff1 | 0.9999991 | 0.9999991 | \x3f7ffff1 | t - \x3f7ffff2 | 0.99999917 | 0.99999917 | \x3f7ffff2 | t - \x3f7ffff3 | 0.9999992 | 0.9999992 | \x3f7ffff3 | t - \x3f7ffff4 | 0.9999993 | 0.9999993 | \x3f7ffff4 | t - \x3f7ffff5 | 0.99999934 | 0.99999934 | \x3f7ffff5 | t - \x3f7ffff6 | 0.9999994 | 0.9999994 | \x3f7ffff6 | t - \x3f7ffff7 | 0.99999946 | 0.99999946 | \x3f7ffff7 | t - \x3f7ffff8 | 0.9999995 | 0.9999995 | \x3f7ffff8 | t - \x3f7ffff9 | 0.9999996 | 0.9999996 | \x3f7ffff9 | t - \x3f7ffffa | 0.99999964 | 0.99999964 | \x3f7ffffa | t - \x3f7ffffb | 0.9999997 | 0.9999997 | \x3f7ffffb | t - \x3f7ffffc | 0.99999976 | 0.99999976 | \x3f7ffffc | t - \x3f7ffffd | 0.9999998 | 0.9999998 | \x3f7ffffd | t - \x3f7ffffe | 0.9999999 | 0.9999999 | \x3f7ffffe | t - \x3f7fffff | 0.99999994 | 0.99999994 | \x3f7fffff | t - \x3f800000 | 1 | 1 | \x3f800000 | t - \x3f800001 | 1.0000001 | 1.0000001 | \x3f800001 | t - \x3f800002 | 1.0000002 | 1.0000002 | \x3f800002 | t - \x3f800003 | 1.0000004 | 1.0000004 | \x3f800003 | t - \x3f800004 | 1.0000005 | 1.0000005 | \x3f800004 | t - \x3f800005 | 1.0000006 | 1.0000006 | \x3f800005 | t - \x3f800006 | 1.0000007 | 1.0000007 | \x3f800006 | t - \x3f800007 | 1.0000008 | 1.0000008 | \x3f800007 | t - \x3f800008 | 1.000001 | 1.000001 | \x3f800008 | t - \x3f800009 | 1.0000011 | 1.0000011 | \x3f800009 | t - \x3f80000f | 1.0000018 | 1.0000018 | \x3f80000f | t - \x3f800010 | 1.0000019 | 1.0000019 | \x3f800010 | t - \x3f800011 | 1.000002 | 1.000002 | \x3f800011 | t - \x3f800012 | 1.0000021 | 1.0000021 | \x3f800012 | t - \x3f800013 | 1.0000023 | 1.0000023 | \x3f800013 | t - \x3f800014 | 1.0000024 | 1.0000024 | \x3f800014 | t - \x3f800017 | 1.0000027 | 1.0000027 | \x3f800017 | t - \x3f800018 | 1.0000029 | 1.0000029 | \x3f800018 | t - \x3f800019 | 1.000003 | 1.000003 | \x3f800019 | t - \x3f80001a | 1.0000031 | 1.0000031 | \x3f80001a | t - \x3f80001b | 1.0000032 | 1.0000032 | \x3f80001b | t - \x3f80001c | 1.0000033 | 1.0000033 | \x3f80001c | t - \x3f800029 | 1.0000049 | 1.0000049 | \x3f800029 | t - \x3f80002a | 1.000005 | 1.000005 | \x3f80002a | t - \x3f80002b | 1.0000051 | 1.0000051 | \x3f80002b | t - \x3f800053 | 1.0000099 | 1.0000099 | \x3f800053 | t - \x3f800054 | 1.00001 | 1.00001 | \x3f800054 | t - \x3f800055 | 1.0000101 | 1.0000101 | \x3f800055 | t - \x3f800346 | 1.0000999 | 1.0000999 | \x3f800346 | t - \x3f800347 | 1.0001 | 1.0001 | \x3f800347 | t - \x3f800348 | 1.0001001 | 1.0001001 | \x3f800348 | t - \x3f8020c4 | 1.0009999 | 1.0009999 | \x3f8020c4 | t - \x3f8020c5 | 1.001 | 1.001 | \x3f8020c5 | t - \x3f8020c6 | 1.0010002 | 1.0010002 | \x3f8020c6 | t - \x3f8147ad | 1.0099999 | 1.0099999 | \x3f8147ad | t - \x3f8147ae | 1.01 | 1.01 | \x3f8147ae | t - \x3f8147af | 1.0100001 | 1.0100001 | \x3f8147af | t - \x3f8ccccc | 1.0999999 | 1.0999999 | \x3f8ccccc | t - \x3f8ccccd | 1.1 | 1.1 | \x3f8ccccd | t - \x3f8cccce | 1.1000001 | 1.1000001 | \x3f8cccce | t - \x3fc90fdb | 1.5707964 | 1.5707964 | \x3fc90fdb | t - \x402df854 | 2.7182817 | 2.7182817 | \x402df854 | t - \x40490fdb | 3.1415927 | 3.1415927 | \x40490fdb | t - \x409fffff | 4.9999995 | 4.9999995 | \x409fffff | t - \x40a00000 | 5 | 5 | \x40a00000 | t - \x40a00001 | 5.0000005 | 5.0000005 | \x40a00001 | t - \x40afffff | 5.4999995 | 5.4999995 | \x40afffff | t - \x40b00000 | 5.5 | 5.5 | \x40b00000 | t - \x40b00001 | 5.5000005 | 5.5000005 | \x40b00001 | t - \x411fffff | 9.999999 | 9.999999 | \x411fffff | t - \x41200000 | 10 | 10 | \x41200000 | t - \x41200001 | 10.000001 | 10.000001 | \x41200001 | t - \x42c7ffff | 99.99999 | 99.99999 | \x42c7ffff | t - \x42c80000 | 100 | 100 | \x42c80000 | t - \x42c80001 | 100.00001 | 100.00001 | \x42c80001 | t - \x4479ffff | 999.99994 | 999.99994 | \x4479ffff | t - \x447a0000 | 1000 | 1000 | \x447a0000 | t - \x447a0001 | 1000.00006 | 1000.00006 | \x447a0001 | t - \x461c3fff | 9999.999 | 9999.999 | \x461c3fff | t - \x461c4000 | 10000 | 10000 | \x461c4000 | t - \x461c4001 | 10000.001 | 10000.001 | \x461c4001 | t - \x47c34fff | 99999.99 | 99999.99 | \x47c34fff | t - \x47c35000 | 100000 | 100000 | \x47c35000 | t - \x47c35001 | 100000.01 | 100000.01 | \x47c35001 | t - \x497423ff | 999999.94 | 999999.94 | \x497423ff | t - \x49742400 | 1e+06 | 1e+06 | \x49742400 | t - \x49742401 | 1.00000006e+06 | 1.00000006e+06 | \x49742401 | t - \x4b18967f | 9.999999e+06 | 9.999999e+06 | \x4b18967f | t - \x4b189680 | 1e+07 | 1e+07 | \x4b189680 | t - \x4b189681 | 1.0000001e+07 | 1.0000001e+07 | \x4b189681 | t - \x4cbebc1f | 9.999999e+07 | 9.999999e+07 | \x4cbebc1f | t - \x4cbebc20 | 1e+08 | 1e+08 | \x4cbebc20 | t - \x4cbebc21 | 1.0000001e+08 | 1.0000001e+08 | \x4cbebc21 | t - \x4e6e6b27 | 9.9999994e+08 | 9.9999994e+08 | \x4e6e6b27 | t - \x4e6e6b28 | 1e+09 | 1e+09 | \x4e6e6b28 | t - \x4e6e6b29 | 1.00000006e+09 | 1.00000006e+09 | \x4e6e6b29 | t - \x501502f8 | 9.999999e+09 | 9.999999e+09 | \x501502f8 | t - \x501502f9 | 1e+10 | 1e+10 | \x501502f9 | t - \x501502fa | 1.0000001e+10 | 1.0000001e+10 | \x501502fa | t - \x51ba43b6 | 9.999999e+10 | 9.999999e+10 | \x51ba43b6 | t - \x51ba43b7 | 1e+11 | 1e+11 | \x51ba43b7 | t - \x51ba43b8 | 1.0000001e+11 | 1.0000001e+11 | \x51ba43b8 | t - \x1f6c1e4a | 5e-20 | 5e-20 | \x1f6c1e4a | t - \x59be6cea | 6.7e+15 | 6.7e+15 | \x59be6cea | t - \x5d5ab6c4 | 9.85e+17 | 9.85e+17 | \x5d5ab6c4 | t - \x2cc4a9bd | 5.5895e-12 | 5.5895e-12 | \x2cc4a9bd | t - \x15ae43fd | 7.038531e-26 | 7.0385313e-26 | \x15ae43fe | f - \x2cf757ca | 7.0299088e-12 | 7.0299088e-12 | \x2cf757ca | t - \x665ba998 | 2.5933168e+23 | 2.5933168e+23 | \x665ba998 | t - \x743c3324 | 5.9642887e+31 | 5.9642887e+31 | \x743c3324 | t - \x47f1205a | 123456.7 | 123456.7 | \x47f1205a | t - \x4640e6ae | 12345.67 | 12345.67 | \x4640e6ae | t - \x449a5225 | 1234.567 | 1234.567 | \x449a5225 | t - \x42f6e9d5 | 123.4567 | 123.4567 | \x42f6e9d5 | t - \x414587dd | 12.34567 | 12.34567 | \x414587dd | t - \x3f9e064b | 1.234567 | 1.234567 | \x3f9e064b | t - \x4c000004 | 3.3554448e+07 | 3.3554448e+07 | \x4c000004 | t - \x50061c46 | 8.999999e+09 | 8.999999e+09 | \x50061c46 | t - \x510006a8 | 3.4366718e+10 | 3.4366718e+10 | \x510006a8 | t - \x48951f84 | 305404.12 | 305404.12 | \x48951f84 | t - \x45fd1840 | 8099.0312 | 8099.0312 | \x45fd1840 | t - \x39800000 | 0.00024414062 | 0.00024414062 | \x39800000 | t - \x3b200000 | 0.0024414062 | 0.0024414062 | \x3b200000 | t - \x3b900000 | 0.0043945312 | 0.0043945312 | \x3b900000 | t - \x3bd00000 | 0.0063476562 | 0.0063476562 | \x3bd00000 | t - \x63800000 | 4.7223665e+21 | 4.7223665e+21 | \x63800000 | t - \x4b000000 | 8.388608e+06 | 8.388608e+06 | \x4b000000 | t - \x4b800000 | 1.6777216e+07 | 1.6777216e+07 | \x4b800000 | t - \x4c000001 | 3.3554436e+07 | 3.3554436e+07 | \x4c000001 | t - \x4c800b0d | 6.7131496e+07 | 6.7131496e+07 | \x4c800b0d | t - \x00d24584 | 1.9310392e-38 | 1.9310392e-38 | \x00d24584 | t - \x00d90b88 | 1.993244e-38 | 1.993244e-38 | \x00d90b88 | t - \x45803f34 | 4103.9004 | 4103.9004 | \x45803f34 | t - \x4f9f24f7 | 5.3399997e+09 | 5.3399997e+09 | \x4f9f24f7 | t - \x3a8722c3 | 0.0010310042 | 0.0010310042 | \x3a8722c3 | t - \x5c800041 | 2.882326e+17 | 2.882326e+17 | \x5c800041 | t - \x15ae43fd | 7.038531e-26 | 7.0385313e-26 | \x15ae43fe | f - \x5d4cccfb | 9.223404e+17 | 9.223404e+17 | \x5d4cccfb | t - \x4c800001 | 6.710887e+07 | 6.710887e+07 | \x4c800001 | t - \x57800ed8 | 2.816025e+14 | 2.816025e+14 | \x57800ed8 | t - \x5f000000 | 9.223372e+18 | 9.223372e+18 | \x5f000000 | t - \x700000f0 | 1.5846086e+29 | 1.5846086e+29 | \x700000f0 | t - \x5f23e9ac | 1.1811161e+19 | 1.1811161e+19 | \x5f23e9ac | t - \x5e9502f9 | 5.368709e+18 | 5.368709e+18 | \x5e9502f9 | t - \x5e8012b1 | 4.6143166e+18 | 4.6143166e+18 | \x5e8012b1 | t - \x3c000028 | 0.007812537 | 0.007812537 | \x3c000028 | t - \x60cde861 | 1.18697725e+20 | 1.18697725e+20 | \x60cde861 | t - \x03aa2a50 | 1.00014165e-36 | 1.00014165e-36 | \x03aa2a50 | t - \x43480000 | 200 | 200 | \x43480000 | t - \x4c000000 | 3.3554432e+07 | 3.3554432e+07 | \x4c000000 | t - \x5d1502f9 | 6.7108864e+17 | 6.7108864e+17 | \x5d1502f9 | t - \x5d9502f9 | 1.3421773e+18 | 1.3421773e+18 | \x5d9502f9 | t - \x5e1502f9 | 2.6843546e+18 | 2.6843546e+18 | \x5e1502f9 | t - \x3f99999a | 1.2 | 1.2 | \x3f99999a | t - \x3f9d70a4 | 1.23 | 1.23 | \x3f9d70a4 | t - \x3f9df3b6 | 1.234 | 1.234 | \x3f9df3b6 | t - \x3f9e0419 | 1.2345 | 1.2345 | \x3f9e0419 | t - \x3f9e0610 | 1.23456 | 1.23456 | \x3f9e0610 | t - \x3f9e064b | 1.234567 | 1.234567 | \x3f9e064b | t - \x3f9e0651 | 1.2345678 | 1.2345678 | \x3f9e0651 | t - \x03d20cfe | 1.23456735e-36 | 1.23456735e-36 | \x03d20cfe | t -(261 rows) - --- clean up, lest opr_sanity complain -drop type xfloat4 cascade; -NOTICE: drop cascades to 6 other objects -DETAIL: drop cascades to function xfloat4in(cstring) -drop cascades to function xfloat4out(xfloat4) -drop cascades to cast from xfloat4 to real -drop cascades to cast from real to xfloat4 -drop cascades to cast from xfloat4 to integer -drop cascades to cast from integer to xfloat4 diff --git a/src/test/regress/resultmap b/src/test/regress/resultmap index 9ccc08c7cf3..e69de29bb2d 100644 --- a/src/test/regress/resultmap +++ b/src/test/regress/resultmap @@ -1 +0,0 @@ -float4:out:.*-.*-cygwin.*=float4-misrounded-input.out -- 2.51.2
