postgresql/src/test/regress/expected/float8.out

1406 lines
50 KiB
Plaintext

--
-- FLOAT8
--
--
-- Build a table for testing
-- (This temporarily hides the table created in test_setup.sql)
--
CREATE TEMP TABLE FLOAT8_TBL(f1 float8);
INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
-- test for underflow and overflow handling
SELECT '10e400'::float8;
ERROR: "10e400" is out of range for type double precision
LINE 1: SELECT '10e400'::float8;
^
SELECT '-10e400'::float8;
ERROR: "-10e400" is out of range for type double precision
LINE 1: SELECT '-10e400'::float8;
^
SELECT '10e-400'::float8;
ERROR: "10e-400" is out of range for type double precision
LINE 1: SELECT '10e-400'::float8;
^
SELECT '-10e-400'::float8;
ERROR: "-10e-400" is out of range for type double precision
LINE 1: SELECT '-10e-400'::float8;
^
-- test smallest normalized input
SELECT float8send('2.2250738585072014E-308'::float8);
float8send
--------------------
\x0010000000000000
(1 row)
-- bad input
INSERT INTO FLOAT8_TBL(f1) VALUES ('');
ERROR: invalid input syntax for type double precision: ""
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('');
^
INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
ERROR: invalid input syntax for type double precision: " "
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
ERROR: invalid input syntax for type double precision: "xyz"
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
ERROR: invalid input syntax for type double precision: "5.0.0"
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
ERROR: invalid input syntax for type double precision: "5 . 0"
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
ERROR: invalid input syntax for type double precision: "5. 0"
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
^
INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
ERROR: invalid input syntax for type double precision: " - 3"
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
ERROR: invalid input syntax for type double precision: "123 5"
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
^
-- Also try it with non-error-throwing API
SELECT pg_input_is_valid('34.5', 'float8');
pg_input_is_valid
-------------------
t
(1 row)
SELECT pg_input_is_valid('xyz', 'float8');
pg_input_is_valid
-------------------
f
(1 row)
SELECT pg_input_is_valid('1e4000', 'float8');
pg_input_is_valid
-------------------
f
(1 row)
SELECT pg_input_error_message('1e4000', 'float8');
pg_input_error_message
----------------------------------------------------
"1e4000" is out of range for type double precision
(1 row)
-- special inputs
SELECT 'NaN'::float8;
float8
--------
NaN
(1 row)
SELECT 'nan'::float8;
float8
--------
NaN
(1 row)
SELECT ' NAN '::float8;
float8
--------
NaN
(1 row)
SELECT 'infinity'::float8;
float8
----------
Infinity
(1 row)
SELECT ' -INFINiTY '::float8;
float8
-----------
-Infinity
(1 row)
-- bad special inputs
SELECT 'N A N'::float8;
ERROR: invalid input syntax for type double precision: "N A N"
LINE 1: SELECT 'N A N'::float8;
^
SELECT 'NaN x'::float8;
ERROR: invalid input syntax for type double precision: "NaN x"
LINE 1: SELECT 'NaN x'::float8;
^
SELECT ' INFINITY x'::float8;
ERROR: invalid input syntax for type double precision: " INFINITY x"
LINE 1: SELECT ' INFINITY x'::float8;
^
SELECT 'Infinity'::float8 + 100.0;
?column?
----------
Infinity
(1 row)
SELECT 'Infinity'::float8 / 'Infinity'::float8;
?column?
----------
NaN
(1 row)
SELECT '42'::float8 / 'Infinity'::float8;
?column?
----------
0
(1 row)
SELECT 'nan'::float8 / 'nan'::float8;
?column?
----------
NaN
(1 row)
SELECT 'nan'::float8 / '0'::float8;
?column?
----------
NaN
(1 row)
SELECT 'nan'::numeric::float8;
float8
--------
NaN
(1 row)
SELECT * FROM FLOAT8_TBL;
f1
----------------------
0
1004.3
-34.84
1.2345678901234e+200
1.2345678901234e-200
(5 rows)
SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';
f1
----------------------
0
-34.84
1.2345678901234e+200
1.2345678901234e-200
(4 rows)
SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';
f1
--------
1004.3
(1 row)
SELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;
f1
----------------------
0
-34.84
1.2345678901234e-200
(3 rows)
SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 < '1004.3';
f1
----------------------
0
-34.84
1.2345678901234e-200
(3 rows)
SELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;
f1
----------------------
0
1004.3
-34.84
1.2345678901234e-200
(4 rows)
SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3';
f1
----------------------
0
1004.3
-34.84
1.2345678901234e-200
(4 rows)
SELECT f.f1, f.f1 * '-10' AS x
FROM FLOAT8_TBL f
WHERE f.f1 > '0.0';
f1 | x
----------------------+-----------------------
1004.3 | -10043
1.2345678901234e+200 | -1.2345678901234e+201
1.2345678901234e-200 | -1.2345678901234e-199
(3 rows)
SELECT f.f1, f.f1 + '-10' AS x
FROM FLOAT8_TBL f
WHERE f.f1 > '0.0';
f1 | x
----------------------+----------------------
1004.3 | 994.3
1.2345678901234e+200 | 1.2345678901234e+200
1.2345678901234e-200 | -10
(3 rows)
SELECT f.f1, f.f1 / '-10' AS x
FROM FLOAT8_TBL f
WHERE f.f1 > '0.0';
f1 | x
----------------------+-----------------------
1004.3 | -100.42999999999999
1.2345678901234e+200 | -1.2345678901234e+199
1.2345678901234e-200 | -1.2345678901234e-201
(3 rows)
SELECT f.f1, f.f1 - '-10' AS x
FROM FLOAT8_TBL f
WHERE f.f1 > '0.0';
f1 | x
----------------------+----------------------
1004.3 | 1014.3
1.2345678901234e+200 | 1.2345678901234e+200
1.2345678901234e-200 | 10
(3 rows)
SELECT f.f1 ^ '2.0' AS square_f1
FROM FLOAT8_TBL f where f.f1 = '1004.3';
square_f1
--------------------
1008618.4899999999
(1 row)
-- absolute value
SELECT f.f1, @f.f1 AS abs_f1
FROM FLOAT8_TBL f;
f1 | abs_f1
----------------------+----------------------
0 | 0
1004.3 | 1004.3
-34.84 | 34.84
1.2345678901234e+200 | 1.2345678901234e+200
1.2345678901234e-200 | 1.2345678901234e-200
(5 rows)
-- truncate
SELECT f.f1, trunc(f.f1) AS trunc_f1
FROM FLOAT8_TBL f;
f1 | trunc_f1
----------------------+----------------------
0 | 0
1004.3 | 1004
-34.84 | -34
1.2345678901234e+200 | 1.2345678901234e+200
1.2345678901234e-200 | 0
(5 rows)
-- round
SELECT f.f1, round(f.f1) AS round_f1
FROM FLOAT8_TBL f;
f1 | round_f1
----------------------+----------------------
0 | 0
1004.3 | 1004
-34.84 | -35
1.2345678901234e+200 | 1.2345678901234e+200
1.2345678901234e-200 | 0
(5 rows)
-- ceil / ceiling
select ceil(f1) as ceil_f1 from float8_tbl f;
ceil_f1
----------------------
0
1005
-34
1.2345678901234e+200
1
(5 rows)
select ceiling(f1) as ceiling_f1 from float8_tbl f;
ceiling_f1
----------------------
0
1005
-34
1.2345678901234e+200
1
(5 rows)
-- floor
select floor(f1) as floor_f1 from float8_tbl f;
floor_f1
----------------------
0
1004
-35
1.2345678901234e+200
0
(5 rows)
-- sign
select sign(f1) as sign_f1 from float8_tbl f;
sign_f1
---------
0
1
-1
1
1
(5 rows)
-- avoid bit-exact output here because operations may not be bit-exact.
SET extra_float_digits = 0;
-- square root
SELECT sqrt(float8 '64') AS eight;
eight
-------
8
(1 row)
SELECT |/ float8 '64' AS eight;
eight
-------
8
(1 row)
SELECT f.f1, |/f.f1 AS sqrt_f1
FROM FLOAT8_TBL f
WHERE f.f1 > '0.0';
f1 | sqrt_f1
----------------------+-----------------------
1004.3 | 31.6906926399535
1.2345678901234e+200 | 1.11111110611109e+100
1.2345678901234e-200 | 1.11111110611109e-100
(3 rows)
-- power
SELECT power(float8 '144', float8 '0.5');
power
-------
12
(1 row)
SELECT power(float8 'NaN', float8 '0.5');
power
-------
NaN
(1 row)
SELECT power(float8 '144', float8 'NaN');
power
-------
NaN
(1 row)
SELECT power(float8 'NaN', float8 'NaN');
power
-------
NaN
(1 row)
SELECT power(float8 '-1', float8 'NaN');
power
-------
NaN
(1 row)
SELECT power(float8 '1', float8 'NaN');
power
-------
1
(1 row)
SELECT power(float8 'NaN', float8 '0');
power
-------
1
(1 row)
SELECT power(float8 'inf', float8 '0');
power
-------
1
(1 row)
SELECT power(float8 '-inf', float8 '0');
power
-------
1
(1 row)
SELECT power(float8 '0', float8 'inf');
power
-------
0
(1 row)
SELECT power(float8 '0', float8 '-inf');
ERROR: zero raised to a negative power is undefined
SELECT power(float8 '1', float8 'inf');
power
-------
1
(1 row)
SELECT power(float8 '1', float8 '-inf');
power
-------
1
(1 row)
SELECT power(float8 '-1', float8 'inf');
power
-------
1
(1 row)
SELECT power(float8 '-1', float8 '-inf');
power
-------
1
(1 row)
SELECT power(float8 '0.1', float8 'inf');
power
-------
0
(1 row)
SELECT power(float8 '-0.1', float8 'inf');
power
-------
0
(1 row)
SELECT power(float8 '1.1', float8 'inf');
power
----------
Infinity
(1 row)
SELECT power(float8 '-1.1', float8 'inf');
power
----------
Infinity
(1 row)
SELECT power(float8 '0.1', float8 '-inf');
power
----------
Infinity
(1 row)
SELECT power(float8 '-0.1', float8 '-inf');
power
----------
Infinity
(1 row)
SELECT power(float8 '1.1', float8 '-inf');
power
-------
0
(1 row)
SELECT power(float8 '-1.1', float8 '-inf');
power
-------
0
(1 row)
SELECT power(float8 'inf', float8 '-2');
power
-------
0
(1 row)
SELECT power(float8 'inf', float8 '2');
power
----------
Infinity
(1 row)
SELECT power(float8 'inf', float8 'inf');
power
----------
Infinity
(1 row)
SELECT power(float8 'inf', float8 '-inf');
power
-------
0
(1 row)
-- Intel's icc misoptimizes the code that controls the sign of this result,
-- even with -mp1. Pending a fix for that, only test for "is it zero".
SELECT power(float8 '-inf', float8 '-2') = '0';
?column?
----------
t
(1 row)
SELECT power(float8 '-inf', float8 '-3');
power
-------
-0
(1 row)
SELECT power(float8 '-inf', float8 '2');
power
----------
Infinity
(1 row)
SELECT power(float8 '-inf', float8 '3');
power
-----------
-Infinity
(1 row)
SELECT power(float8 '-inf', float8 '3.5');
ERROR: a negative number raised to a non-integer power yields a complex result
SELECT power(float8 '-inf', float8 'inf');
power
----------
Infinity
(1 row)
SELECT power(float8 '-inf', float8 '-inf');
power
-------
0
(1 row)
-- take exp of ln(f.f1)
SELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1
FROM FLOAT8_TBL f
WHERE f.f1 > '0.0';
f1 | exp_ln_f1
----------------------+-----------------------
1004.3 | 1004.3
1.2345678901234e+200 | 1.23456789012338e+200
1.2345678901234e-200 | 1.23456789012339e-200
(3 rows)
-- check edge cases for exp
SELECT exp('inf'::float8), exp('-inf'::float8), exp('nan'::float8);
exp | exp | exp
----------+-----+-----
Infinity | 0 | NaN
(1 row)
-- cube root
SELECT ||/ float8 '27' AS three;
three
-------
3
(1 row)
SELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
f1 | cbrt_f1
----------------------+----------------------
0 | 0
1004.3 | 10.014312837827
-34.84 | -3.26607421344208
1.2345678901234e+200 | 4.97933859234765e+66
1.2345678901234e-200 | 2.3112042409018e-67
(5 rows)
SELECT * FROM FLOAT8_TBL;
f1
----------------------
0
1004.3
-34.84
1.2345678901234e+200
1.2345678901234e-200
(5 rows)
UPDATE FLOAT8_TBL
SET f1 = FLOAT8_TBL.f1 * '-1'
WHERE FLOAT8_TBL.f1 > '0.0';
SELECT f.f1 * '1e200' from FLOAT8_TBL f;
ERROR: value out of range: overflow
SELECT f.f1 ^ '1e200' from FLOAT8_TBL f;
ERROR: value out of range: overflow
SELECT 0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5;
?column?
----------
2
(1 row)
SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
ERROR: cannot take logarithm of zero
SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
ERROR: cannot take logarithm of a negative number
SELECT exp(f.f1) from FLOAT8_TBL f;
ERROR: value out of range: underflow
SELECT f.f1 / '0.0' from FLOAT8_TBL f;
ERROR: division by zero
SELECT * FROM FLOAT8_TBL;
f1
-----------------------
0
-34.84
-1004.3
-1.2345678901234e+200
-1.2345678901234e-200
(5 rows)
-- hyperbolic functions
-- we run these with extra_float_digits = 0 too, since different platforms
-- tend to produce results that vary in the last place.
SELECT sinh(float8 '1');
sinh
-----------------
1.1752011936438
(1 row)
SELECT cosh(float8 '1');
cosh
------------------
1.54308063481524
(1 row)
SELECT tanh(float8 '1');
tanh
-------------------
0.761594155955765
(1 row)
SELECT asinh(float8 '1');
asinh
-------------------
0.881373587019543
(1 row)
SELECT acosh(float8 '2');
acosh
------------------
1.31695789692482
(1 row)
SELECT atanh(float8 '0.5');
atanh
-------------------
0.549306144334055
(1 row)
-- test Inf/NaN cases for hyperbolic functions
SELECT sinh(float8 'infinity');
sinh
----------
Infinity
(1 row)
SELECT sinh(float8 '-infinity');
sinh
-----------
-Infinity
(1 row)
SELECT sinh(float8 'nan');
sinh
------
NaN
(1 row)
SELECT cosh(float8 'infinity');
cosh
----------
Infinity
(1 row)
SELECT cosh(float8 '-infinity');
cosh
----------
Infinity
(1 row)
SELECT cosh(float8 'nan');
cosh
------
NaN
(1 row)
SELECT tanh(float8 'infinity');
tanh
------
1
(1 row)
SELECT tanh(float8 '-infinity');
tanh
------
-1
(1 row)
SELECT tanh(float8 'nan');
tanh
------
NaN
(1 row)
SELECT asinh(float8 'infinity');
asinh
----------
Infinity
(1 row)
SELECT asinh(float8 '-infinity');
asinh
-----------
-Infinity
(1 row)
SELECT asinh(float8 'nan');
asinh
-------
NaN
(1 row)
-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test
-- SELECT acosh(float8 'infinity');
SELECT acosh(float8 '-infinity');
ERROR: input is out of range
SELECT acosh(float8 'nan');
acosh
-------
NaN
(1 row)
SELECT atanh(float8 'infinity');
ERROR: input is out of range
SELECT atanh(float8 '-infinity');
ERROR: input is out of range
SELECT atanh(float8 'nan');
atanh
-------
NaN
(1 row)
RESET extra_float_digits;
-- test for over- and underflow
INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
ERROR: "10e400" is out of range for type double precision
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
ERROR: "-10e400" is out of range for type double precision
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
ERROR: "10e-400" is out of range for type double precision
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
^
INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
ERROR: "-10e-400" is out of range for type double precision
LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
^
DROP TABLE FLOAT8_TBL;
-- Check the float8 values exported for use by other tests
SELECT * FROM FLOAT8_TBL;
f1
-----------------------
0
-34.84
-1004.3
-1.2345678901234e+200
-1.2345678901234e-200
(5 rows)
-- test edge-case coercions to integer
SELECT '32767.4'::float8::int2;
int2
-------
32767
(1 row)
SELECT '32767.6'::float8::int2;
ERROR: smallint out of range
SELECT '-32768.4'::float8::int2;
int2
--------
-32768
(1 row)
SELECT '-32768.6'::float8::int2;
ERROR: smallint out of range
SELECT '2147483647.4'::float8::int4;
int4
------------
2147483647
(1 row)
SELECT '2147483647.6'::float8::int4;
ERROR: integer out of range
SELECT '-2147483648.4'::float8::int4;
int4
-------------
-2147483648
(1 row)
SELECT '-2147483648.6'::float8::int4;
ERROR: integer out of range
SELECT '9223372036854773760'::float8::int8;
int8
---------------------
9223372036854773760
(1 row)
SELECT '9223372036854775807'::float8::int8;
ERROR: bigint out of range
SELECT '-9223372036854775808.5'::float8::int8;
int8
----------------------
-9223372036854775808
(1 row)
SELECT '-9223372036854780000'::float8::int8;
ERROR: bigint out of range
-- test exact cases for trigonometric functions in degrees
SELECT x,
sind(x),
sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
FROM (VALUES (0), (30), (90), (150), (180),
(210), (270), (330), (360)) AS t(x);
x | sind | sind_exact
-----+------+------------
0 | 0 | t
30 | 0.5 | t
90 | 1 | t
150 | 0.5 | t
180 | 0 | t
210 | -0.5 | t
270 | -1 | t
330 | -0.5 | t
360 | 0 | t
(9 rows)
SELECT x,
cosd(x),
cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
FROM (VALUES (0), (60), (90), (120), (180),
(240), (270), (300), (360)) AS t(x);
x | cosd | cosd_exact
-----+------+------------
0 | 1 | t
60 | 0.5 | t
90 | 0 | t
120 | -0.5 | t
180 | -1 | t
240 | -0.5 | t
270 | 0 | t
300 | 0.5 | t
360 | 1 | t
(9 rows)
SELECT x,
tand(x),
tand(x) IN ('-Infinity'::float8,-1,0,
1,'Infinity'::float8) AS tand_exact,
cotd(x),
cotd(x) IN ('-Infinity'::float8,-1,0,
1,'Infinity'::float8) AS cotd_exact
FROM (VALUES (0), (45), (90), (135), (180),
(225), (270), (315), (360)) AS t(x);
x | tand | tand_exact | cotd | cotd_exact
-----+-----------+------------+-----------+------------
0 | 0 | t | Infinity | t
45 | 1 | t | 1 | t
90 | Infinity | t | 0 | t
135 | -1 | t | -1 | t
180 | 0 | t | -Infinity | t
225 | 1 | t | 1 | t
270 | -Infinity | t | 0 | t
315 | -1 | t | -1 | t
360 | 0 | t | Infinity | t
(9 rows)
SELECT x,
asind(x),
asind(x) IN (-90,-30,0,30,90) AS asind_exact,
acosd(x),
acosd(x) IN (0,60,90,120,180) AS acosd_exact
FROM (VALUES (-1), (-0.5), (0), (0.5), (1)) AS t(x);
x | asind | asind_exact | acosd | acosd_exact
------+-------+-------------+-------+-------------
-1 | -90 | t | 180 | t
-0.5 | -30 | t | 120 | t
0 | 0 | t | 90 | t
0.5 | 30 | t | 60 | t
1 | 90 | t | 0 | t
(5 rows)
SELECT x,
atand(x),
atand(x) IN (-90,-45,0,45,90) AS atand_exact
FROM (VALUES ('-Infinity'::float8), (-1), (0), (1),
('Infinity'::float8)) AS t(x);
x | atand | atand_exact
-----------+-------+-------------
-Infinity | -90 | t
-1 | -45 | t
0 | 0 | t
1 | 45 | t
Infinity | 90 | t
(5 rows)
SELECT x, y,
atan2d(y, x),
atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact
FROM (SELECT 10*cosd(a), 10*sind(a)
FROM generate_series(0, 360, 90) AS t(a)) AS t(x,y);
x | y | atan2d | atan2d_exact
-----+-----+--------+--------------
10 | 0 | 0 | t
0 | 10 | 90 | t
-10 | 0 | 180 | t
0 | -10 | -90 | t
10 | 0 | 0 | t
(5 rows)
--
-- 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 xfloat8;
create function xfloat8in(cstring) returns xfloat8 immutable strict
language internal as 'int8in';
NOTICE: return type xfloat8 is only a shell
create function xfloat8out(xfloat8) returns cstring immutable strict
language internal as 'int8out';
NOTICE: argument type xfloat8 is only a shell
create type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);
create cast (xfloat8 as float8) without function;
create cast (float8 as xfloat8) without function;
create cast (xfloat8 as bigint) without function;
create cast (bigint as xfloat8) without function;
-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)
-- 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'0000000000000001'),
(x'0000000000000002'), (x'0000000000000003'),
(x'0000000000001000'), (x'0000000100000000'),
(x'0000010000000000'), (x'0000010100000000'),
(x'0000400000000000'), (x'0000400100000000'),
(x'0000800000000000'), (x'0000800000000001'),
-- these values taken from upstream testsuite
(x'00000000000f4240'),
(x'00000000016e3600'),
(x'0000008cdcdea440'),
-- borderline between subnormal and normal
(x'000ffffffffffff0'), (x'000ffffffffffff1'),
(x'000ffffffffffffe'), (x'000fffffffffffff'))
select float8send(flt) as ibits,
flt
from (select bits::bigint::xfloat8::float8 as flt
from testdata
offset 0) s;
ibits | flt
--------------------+-------------------------
\x0000000000000001 | 5e-324
\x0000000000000002 | 1e-323
\x0000000000000003 | 1.5e-323
\x0000000000001000 | 2.0237e-320
\x0000000100000000 | 2.121995791e-314
\x0000010000000000 | 5.43230922487e-312
\x0000010100000000 | 5.45352918278e-312
\x0000400000000000 | 3.4766779039175e-310
\x0000400100000000 | 3.4768901034966e-310
\x0000800000000000 | 6.953355807835e-310
\x0000800000000001 | 6.95335580783505e-310
\x00000000000f4240 | 4.940656e-318
\x00000000016e3600 | 1.18575755e-316
\x0000008cdcdea440 | 2.989102097996e-312
\x000ffffffffffff0 | 2.2250738585071935e-308
\x000ffffffffffff1 | 2.225073858507194e-308
\x000ffffffffffffe | 2.2250738585072004e-308
\x000fffffffffffff | 2.225073858507201e-308
(18 rows)
-- round-trip tests
with testdata(bits) as (values
(x'0000000000000000'),
-- smallest normal values
(x'0010000000000000'), (x'0010000000000001'),
(x'0010000000000002'), (x'0018000000000000'),
--
(x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),
(x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),
(x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),
(x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),
(x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),
(x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),
(x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),
(x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),
(x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),
(x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),
-- values very close to 1
(x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),
(x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),
(x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),
(x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),
(x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),
(x'3fefffffffffffff'),
(x'3ff0000000000000'),
(x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),
(x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),
(x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),
--
(x'3ff921fb54442d18'),
(x'4005bf0a8b14576a'),
(x'400921fb54442d18'),
--
(x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),
(x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),
(x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),
(x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),
(x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),
(x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),
(x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),
(x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),
(x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),
(x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),
(x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),
(x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),
(x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),
(x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),
(x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),
(x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),
(x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),
(x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),
(x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),
(x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),
(x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),
(x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),
(x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),
(x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),
(x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),
--
(x'7feffffffffffffe'), (x'7fefffffffffffff'),
-- round to even tests (+ve)
(x'4350000000000002'),
(x'4350000000002e06'),
(x'4352000000000003'),
(x'4352000000000004'),
(x'4358000000000003'),
(x'4358000000000004'),
(x'435f000000000020'),
-- round to even tests (-ve)
(x'c350000000000002'),
(x'c350000000002e06'),
(x'c352000000000003'),
(x'c352000000000004'),
(x'c358000000000003'),
(x'c358000000000004'),
(x'c35f000000000020'),
-- exercise fixed-point memmoves
(x'42dc12218377de66'),
(x'42a674e79c5fe51f'),
(x'4271f71fb04cb74c'),
(x'423cbe991a145879'),
(x'4206fee0e1a9e061'),
(x'41d26580b487e6b4'),
(x'419d6f34540ca453'),
(x'41678c29dcd6e9dc'),
(x'4132d687e3df217d'),
(x'40fe240c9fcb68c8'),
(x'40c81cd6e63c53d3'),
(x'40934a4584fd0fdc'),
(x'405edd3c07fb4c93'),
(x'4028b0fcd32f7076'),
(x'3ff3c0ca428c59f8'),
-- these cases come from the upstream's testsuite
-- LotsOfTrailingZeros)
(x'3e60000000000000'),
-- Regression
(x'c352bd2668e077c4'),
(x'434018601510c000'),
(x'43d055dc36f24000'),
(x'43e052961c6f8000'),
(x'3ff3c0ca2a5b1d5d'),
-- LooksLikePow5
(x'4830f0cf064dd592'),
(x'4840f0cf064dd592'),
(x'4850f0cf064dd592'),
-- OutputLength
(x'3ff3333333333333'),
(x'3ff3ae147ae147ae'),
(x'3ff3be76c8b43958'),
(x'3ff3c083126e978d'),
(x'3ff3c0c1fc8f3238'),
(x'3ff3c0c9539b8887'),
(x'3ff3c0ca2a5b1d5d'),
(x'3ff3c0ca4283de1b'),
(x'3ff3c0ca43db770a'),
(x'3ff3c0ca428abd53'),
(x'3ff3c0ca428c1d2b'),
(x'3ff3c0ca428c51f2'),
(x'3ff3c0ca428c58fc'),
(x'3ff3c0ca428c59dd'),
(x'3ff3c0ca428c59f8'),
(x'3ff3c0ca428c59fb'),
-- 32-bit chunking
(x'40112e0be8047a7d'),
(x'40112e0be815a889'),
(x'40112e0be826d695'),
(x'40112e0be83804a1'),
(x'40112e0be84932ad'),
-- MinMaxShift
(x'0040000000000000'),
(x'007fffffffffffff'),
(x'0290000000000000'),
(x'029fffffffffffff'),
(x'4350000000000000'),
(x'435fffffffffffff'),
(x'1330000000000000'),
(x'133fffffffffffff'),
(x'3a6fa7161a4d6e0c')
)
select float8send(flt) as ibits,
flt,
flt::text::float8 as r_flt,
float8send(flt::text::float8) as obits,
float8send(flt::text::float8) = float8send(flt) as correct
from (select bits::bigint::xfloat8::float8 as flt
from testdata
offset 0) s;
ibits | flt | r_flt | obits | correct
--------------------+-------------------------+-------------------------+--------------------+---------
\x0000000000000000 | 0 | 0 | \x0000000000000000 | t
\x0010000000000000 | 2.2250738585072014e-308 | 2.2250738585072014e-308 | \x0010000000000000 | t
\x0010000000000001 | 2.225073858507202e-308 | 2.225073858507202e-308 | \x0010000000000001 | t
\x0010000000000002 | 2.2250738585072024e-308 | 2.2250738585072024e-308 | \x0010000000000002 | t
\x0018000000000000 | 3.337610787760802e-308 | 3.337610787760802e-308 | \x0018000000000000 | t
\x3ddb7cdfd9d7bdba | 9.999999999999999e-11 | 9.999999999999999e-11 | \x3ddb7cdfd9d7bdba | t
\x3ddb7cdfd9d7bdbb | 1e-10 | 1e-10 | \x3ddb7cdfd9d7bdbb | t
\x3ddb7cdfd9d7bdbc | 1.0000000000000002e-10 | 1.0000000000000002e-10 | \x3ddb7cdfd9d7bdbc | t
\x3e112e0be826d694 | 9.999999999999999e-10 | 9.999999999999999e-10 | \x3e112e0be826d694 | t
\x3e112e0be826d695 | 1e-09 | 1e-09 | \x3e112e0be826d695 | t
\x3e112e0be826d696 | 1.0000000000000003e-09 | 1.0000000000000003e-09 | \x3e112e0be826d696 | t
\x3e45798ee2308c39 | 9.999999999999999e-09 | 9.999999999999999e-09 | \x3e45798ee2308c39 | t
\x3e45798ee2308c3a | 1e-08 | 1e-08 | \x3e45798ee2308c3a | t
\x3e45798ee2308c3b | 1.0000000000000002e-08 | 1.0000000000000002e-08 | \x3e45798ee2308c3b | t
\x3e7ad7f29abcaf47 | 9.999999999999998e-08 | 9.999999999999998e-08 | \x3e7ad7f29abcaf47 | t
\x3e7ad7f29abcaf48 | 1e-07 | 1e-07 | \x3e7ad7f29abcaf48 | t
\x3e7ad7f29abcaf49 | 1.0000000000000001e-07 | 1.0000000000000001e-07 | \x3e7ad7f29abcaf49 | t
\x3eb0c6f7a0b5ed8c | 9.999999999999997e-07 | 9.999999999999997e-07 | \x3eb0c6f7a0b5ed8c | t
\x3eb0c6f7a0b5ed8d | 1e-06 | 1e-06 | \x3eb0c6f7a0b5ed8d | t
\x3eb0c6f7a0b5ed8e | 1.0000000000000002e-06 | 1.0000000000000002e-06 | \x3eb0c6f7a0b5ed8e | t
\x3ee4f8b588e368ef | 9.999999999999997e-06 | 9.999999999999997e-06 | \x3ee4f8b588e368ef | t
\x3ee4f8b588e368f0 | 9.999999999999999e-06 | 9.999999999999999e-06 | \x3ee4f8b588e368f0 | t
\x3ee4f8b588e368f1 | 1e-05 | 1e-05 | \x3ee4f8b588e368f1 | t
\x3f1a36e2eb1c432c | 9.999999999999999e-05 | 9.999999999999999e-05 | \x3f1a36e2eb1c432c | t
\x3f1a36e2eb1c432d | 0.0001 | 0.0001 | \x3f1a36e2eb1c432d | t
\x3f1a36e2eb1c432e | 0.00010000000000000002 | 0.00010000000000000002 | \x3f1a36e2eb1c432e | t
\x3f50624dd2f1a9fb | 0.0009999999999999998 | 0.0009999999999999998 | \x3f50624dd2f1a9fb | t
\x3f50624dd2f1a9fc | 0.001 | 0.001 | \x3f50624dd2f1a9fc | t
\x3f50624dd2f1a9fd | 0.0010000000000000002 | 0.0010000000000000002 | \x3f50624dd2f1a9fd | t
\x3f847ae147ae147a | 0.009999999999999998 | 0.009999999999999998 | \x3f847ae147ae147a | t
\x3f847ae147ae147b | 0.01 | 0.01 | \x3f847ae147ae147b | t
\x3f847ae147ae147c | 0.010000000000000002 | 0.010000000000000002 | \x3f847ae147ae147c | t
\x3fb9999999999999 | 0.09999999999999999 | 0.09999999999999999 | \x3fb9999999999999 | t
\x3fb999999999999a | 0.1 | 0.1 | \x3fb999999999999a | t
\x3fb999999999999b | 0.10000000000000002 | 0.10000000000000002 | \x3fb999999999999b | t
\x3feffffffffffff0 | 0.9999999999999982 | 0.9999999999999982 | \x3feffffffffffff0 | t
\x3feffffffffffff1 | 0.9999999999999983 | 0.9999999999999983 | \x3feffffffffffff1 | t
\x3feffffffffffff2 | 0.9999999999999984 | 0.9999999999999984 | \x3feffffffffffff2 | t
\x3feffffffffffff3 | 0.9999999999999986 | 0.9999999999999986 | \x3feffffffffffff3 | t
\x3feffffffffffff4 | 0.9999999999999987 | 0.9999999999999987 | \x3feffffffffffff4 | t
\x3feffffffffffff5 | 0.9999999999999988 | 0.9999999999999988 | \x3feffffffffffff5 | t
\x3feffffffffffff6 | 0.9999999999999989 | 0.9999999999999989 | \x3feffffffffffff6 | t
\x3feffffffffffff7 | 0.999999999999999 | 0.999999999999999 | \x3feffffffffffff7 | t
\x3feffffffffffff8 | 0.9999999999999991 | 0.9999999999999991 | \x3feffffffffffff8 | t
\x3feffffffffffff9 | 0.9999999999999992 | 0.9999999999999992 | \x3feffffffffffff9 | t
\x3feffffffffffffa | 0.9999999999999993 | 0.9999999999999993 | \x3feffffffffffffa | t
\x3feffffffffffffb | 0.9999999999999994 | 0.9999999999999994 | \x3feffffffffffffb | t
\x3feffffffffffffc | 0.9999999999999996 | 0.9999999999999996 | \x3feffffffffffffc | t
\x3feffffffffffffd | 0.9999999999999997 | 0.9999999999999997 | \x3feffffffffffffd | t
\x3feffffffffffffe | 0.9999999999999998 | 0.9999999999999998 | \x3feffffffffffffe | t
\x3fefffffffffffff | 0.9999999999999999 | 0.9999999999999999 | \x3fefffffffffffff | t
\x3ff0000000000000 | 1 | 1 | \x3ff0000000000000 | t
\x3ff0000000000001 | 1.0000000000000002 | 1.0000000000000002 | \x3ff0000000000001 | t
\x3ff0000000000002 | 1.0000000000000004 | 1.0000000000000004 | \x3ff0000000000002 | t
\x3ff0000000000003 | 1.0000000000000007 | 1.0000000000000007 | \x3ff0000000000003 | t
\x3ff0000000000004 | 1.0000000000000009 | 1.0000000000000009 | \x3ff0000000000004 | t
\x3ff0000000000005 | 1.000000000000001 | 1.000000000000001 | \x3ff0000000000005 | t
\x3ff0000000000006 | 1.0000000000000013 | 1.0000000000000013 | \x3ff0000000000006 | t
\x3ff0000000000007 | 1.0000000000000016 | 1.0000000000000016 | \x3ff0000000000007 | t
\x3ff0000000000008 | 1.0000000000000018 | 1.0000000000000018 | \x3ff0000000000008 | t
\x3ff0000000000009 | 1.000000000000002 | 1.000000000000002 | \x3ff0000000000009 | t
\x3ff921fb54442d18 | 1.5707963267948966 | 1.5707963267948966 | \x3ff921fb54442d18 | t
\x4005bf0a8b14576a | 2.7182818284590455 | 2.7182818284590455 | \x4005bf0a8b14576a | t
\x400921fb54442d18 | 3.141592653589793 | 3.141592653589793 | \x400921fb54442d18 | t
\x4023ffffffffffff | 9.999999999999998 | 9.999999999999998 | \x4023ffffffffffff | t
\x4024000000000000 | 10 | 10 | \x4024000000000000 | t
\x4024000000000001 | 10.000000000000002 | 10.000000000000002 | \x4024000000000001 | t
\x4058ffffffffffff | 99.99999999999999 | 99.99999999999999 | \x4058ffffffffffff | t
\x4059000000000000 | 100 | 100 | \x4059000000000000 | t
\x4059000000000001 | 100.00000000000001 | 100.00000000000001 | \x4059000000000001 | t
\x408f3fffffffffff | 999.9999999999999 | 999.9999999999999 | \x408f3fffffffffff | t
\x408f400000000000 | 1000 | 1000 | \x408f400000000000 | t
\x408f400000000001 | 1000.0000000000001 | 1000.0000000000001 | \x408f400000000001 | t
\x40c387ffffffffff | 9999.999999999998 | 9999.999999999998 | \x40c387ffffffffff | t
\x40c3880000000000 | 10000 | 10000 | \x40c3880000000000 | t
\x40c3880000000001 | 10000.000000000002 | 10000.000000000002 | \x40c3880000000001 | t
\x40f869ffffffffff | 99999.99999999999 | 99999.99999999999 | \x40f869ffffffffff | t
\x40f86a0000000000 | 100000 | 100000 | \x40f86a0000000000 | t
\x40f86a0000000001 | 100000.00000000001 | 100000.00000000001 | \x40f86a0000000001 | t
\x412e847fffffffff | 999999.9999999999 | 999999.9999999999 | \x412e847fffffffff | t
\x412e848000000000 | 1000000 | 1000000 | \x412e848000000000 | t
\x412e848000000001 | 1000000.0000000001 | 1000000.0000000001 | \x412e848000000001 | t
\x416312cfffffffff | 9999999.999999998 | 9999999.999999998 | \x416312cfffffffff | t
\x416312d000000000 | 10000000 | 10000000 | \x416312d000000000 | t
\x416312d000000001 | 10000000.000000002 | 10000000.000000002 | \x416312d000000001 | t
\x4197d783ffffffff | 99999999.99999999 | 99999999.99999999 | \x4197d783ffffffff | t
\x4197d78400000000 | 100000000 | 100000000 | \x4197d78400000000 | t
\x4197d78400000001 | 100000000.00000001 | 100000000.00000001 | \x4197d78400000001 | t
\x41cdcd64ffffffff | 999999999.9999999 | 999999999.9999999 | \x41cdcd64ffffffff | t
\x41cdcd6500000000 | 1000000000 | 1000000000 | \x41cdcd6500000000 | t
\x41cdcd6500000001 | 1000000000.0000001 | 1000000000.0000001 | \x41cdcd6500000001 | t
\x4202a05f1fffffff | 9999999999.999998 | 9999999999.999998 | \x4202a05f1fffffff | t
\x4202a05f20000000 | 10000000000 | 10000000000 | \x4202a05f20000000 | t
\x4202a05f20000001 | 10000000000.000002 | 10000000000.000002 | \x4202a05f20000001 | t
\x42374876e7ffffff | 99999999999.99998 | 99999999999.99998 | \x42374876e7ffffff | t
\x42374876e8000000 | 100000000000 | 100000000000 | \x42374876e8000000 | t
\x42374876e8000001 | 100000000000.00002 | 100000000000.00002 | \x42374876e8000001 | t
\x426d1a94a1ffffff | 999999999999.9999 | 999999999999.9999 | \x426d1a94a1ffffff | t
\x426d1a94a2000000 | 1000000000000 | 1000000000000 | \x426d1a94a2000000 | t
\x426d1a94a2000001 | 1000000000000.0001 | 1000000000000.0001 | \x426d1a94a2000001 | t
\x42a2309ce53fffff | 9999999999999.998 | 9999999999999.998 | \x42a2309ce53fffff | t
\x42a2309ce5400000 | 10000000000000 | 10000000000000 | \x42a2309ce5400000 | t
\x42a2309ce5400001 | 10000000000000.002 | 10000000000000.002 | \x42a2309ce5400001 | t
\x42d6bcc41e8fffff | 99999999999999.98 | 99999999999999.98 | \x42d6bcc41e8fffff | t
\x42d6bcc41e900000 | 100000000000000 | 100000000000000 | \x42d6bcc41e900000 | t
\x42d6bcc41e900001 | 100000000000000.02 | 100000000000000.02 | \x42d6bcc41e900001 | t
\x430c6bf52633ffff | 999999999999999.9 | 999999999999999.9 | \x430c6bf52633ffff | t
\x430c6bf526340000 | 1e+15 | 1e+15 | \x430c6bf526340000 | t
\x430c6bf526340001 | 1.0000000000000001e+15 | 1.0000000000000001e+15 | \x430c6bf526340001 | t
\x4341c37937e07fff | 9.999999999999998e+15 | 9.999999999999998e+15 | \x4341c37937e07fff | t
\x4341c37937e08000 | 1e+16 | 1e+16 | \x4341c37937e08000 | t
\x4341c37937e08001 | 1.0000000000000002e+16 | 1.0000000000000002e+16 | \x4341c37937e08001 | t
\x4376345785d89fff | 9.999999999999998e+16 | 9.999999999999998e+16 | \x4376345785d89fff | t
\x4376345785d8a000 | 1e+17 | 1e+17 | \x4376345785d8a000 | t
\x4376345785d8a001 | 1.0000000000000002e+17 | 1.0000000000000002e+17 | \x4376345785d8a001 | t
\x43abc16d674ec7ff | 9.999999999999999e+17 | 9.999999999999999e+17 | \x43abc16d674ec7ff | t
\x43abc16d674ec800 | 1e+18 | 1e+18 | \x43abc16d674ec800 | t
\x43abc16d674ec801 | 1.0000000000000001e+18 | 1.0000000000000001e+18 | \x43abc16d674ec801 | t
\x43e158e460913cff | 9.999999999999998e+18 | 9.999999999999998e+18 | \x43e158e460913cff | t
\x43e158e460913d00 | 1e+19 | 1e+19 | \x43e158e460913d00 | t
\x43e158e460913d01 | 1.0000000000000002e+19 | 1.0000000000000002e+19 | \x43e158e460913d01 | t
\x4415af1d78b58c3f | 9.999999999999998e+19 | 9.999999999999998e+19 | \x4415af1d78b58c3f | t
\x4415af1d78b58c40 | 1e+20 | 1e+20 | \x4415af1d78b58c40 | t
\x4415af1d78b58c41 | 1.0000000000000002e+20 | 1.0000000000000002e+20 | \x4415af1d78b58c41 | t
\x444b1ae4d6e2ef4f | 9.999999999999999e+20 | 9.999999999999999e+20 | \x444b1ae4d6e2ef4f | t
\x444b1ae4d6e2ef50 | 1e+21 | 1e+21 | \x444b1ae4d6e2ef50 | t
\x444b1ae4d6e2ef51 | 1.0000000000000001e+21 | 1.0000000000000001e+21 | \x444b1ae4d6e2ef51 | t
\x4480f0cf064dd591 | 9.999999999999998e+21 | 9.999999999999998e+21 | \x4480f0cf064dd591 | t
\x4480f0cf064dd592 | 1e+22 | 1e+22 | \x4480f0cf064dd592 | t
\x4480f0cf064dd593 | 1.0000000000000002e+22 | 1.0000000000000002e+22 | \x4480f0cf064dd593 | t
\x44b52d02c7e14af5 | 9.999999999999997e+22 | 9.999999999999997e+22 | \x44b52d02c7e14af5 | t
\x44b52d02c7e14af6 | 9.999999999999999e+22 | 9.999999999999999e+22 | \x44b52d02c7e14af6 | t
\x44b52d02c7e14af7 | 1.0000000000000001e+23 | 1.0000000000000001e+23 | \x44b52d02c7e14af7 | t
\x44ea784379d99db3 | 9.999999999999998e+23 | 9.999999999999998e+23 | \x44ea784379d99db3 | t
\x44ea784379d99db4 | 1e+24 | 1e+24 | \x44ea784379d99db4 | t
\x44ea784379d99db5 | 1.0000000000000001e+24 | 1.0000000000000001e+24 | \x44ea784379d99db5 | t
\x45208b2a2c280290 | 9.999999999999999e+24 | 9.999999999999999e+24 | \x45208b2a2c280290 | t
\x45208b2a2c280291 | 1e+25 | 1e+25 | \x45208b2a2c280291 | t
\x45208b2a2c280292 | 1.0000000000000003e+25 | 1.0000000000000003e+25 | \x45208b2a2c280292 | t
\x7feffffffffffffe | 1.7976931348623155e+308 | 1.7976931348623155e+308 | \x7feffffffffffffe | t
\x7fefffffffffffff | 1.7976931348623157e+308 | 1.7976931348623157e+308 | \x7fefffffffffffff | t
\x4350000000000002 | 1.8014398509481992e+16 | 1.8014398509481992e+16 | \x4350000000000002 | t
\x4350000000002e06 | 1.8014398509529112e+16 | 1.8014398509529112e+16 | \x4350000000002e06 | t
\x4352000000000003 | 2.0266198323167244e+16 | 2.0266198323167244e+16 | \x4352000000000003 | t
\x4352000000000004 | 2.0266198323167248e+16 | 2.0266198323167248e+16 | \x4352000000000004 | t
\x4358000000000003 | 2.7021597764222988e+16 | 2.7021597764222988e+16 | \x4358000000000003 | t
\x4358000000000004 | 2.7021597764222992e+16 | 2.7021597764222992e+16 | \x4358000000000004 | t
\x435f000000000020 | 3.4902897112121472e+16 | 3.4902897112121472e+16 | \x435f000000000020 | t
\xc350000000000002 | -1.8014398509481992e+16 | -1.8014398509481992e+16 | \xc350000000000002 | t
\xc350000000002e06 | -1.8014398509529112e+16 | -1.8014398509529112e+16 | \xc350000000002e06 | t
\xc352000000000003 | -2.0266198323167244e+16 | -2.0266198323167244e+16 | \xc352000000000003 | t
\xc352000000000004 | -2.0266198323167248e+16 | -2.0266198323167248e+16 | \xc352000000000004 | t
\xc358000000000003 | -2.7021597764222988e+16 | -2.7021597764222988e+16 | \xc358000000000003 | t
\xc358000000000004 | -2.7021597764222992e+16 | -2.7021597764222992e+16 | \xc358000000000004 | t
\xc35f000000000020 | -3.4902897112121472e+16 | -3.4902897112121472e+16 | \xc35f000000000020 | t
\x42dc12218377de66 | 123456789012345.6 | 123456789012345.6 | \x42dc12218377de66 | t
\x42a674e79c5fe51f | 12345678901234.56 | 12345678901234.56 | \x42a674e79c5fe51f | t
\x4271f71fb04cb74c | 1234567890123.456 | 1234567890123.456 | \x4271f71fb04cb74c | t
\x423cbe991a145879 | 123456789012.3456 | 123456789012.3456 | \x423cbe991a145879 | t
\x4206fee0e1a9e061 | 12345678901.23456 | 12345678901.23456 | \x4206fee0e1a9e061 | t
\x41d26580b487e6b4 | 1234567890.123456 | 1234567890.123456 | \x41d26580b487e6b4 | t
\x419d6f34540ca453 | 123456789.0123456 | 123456789.0123456 | \x419d6f34540ca453 | t
\x41678c29dcd6e9dc | 12345678.90123456 | 12345678.90123456 | \x41678c29dcd6e9dc | t
\x4132d687e3df217d | 1234567.890123456 | 1234567.890123456 | \x4132d687e3df217d | t
\x40fe240c9fcb68c8 | 123456.7890123456 | 123456.7890123456 | \x40fe240c9fcb68c8 | t
\x40c81cd6e63c53d3 | 12345.67890123456 | 12345.67890123456 | \x40c81cd6e63c53d3 | t
\x40934a4584fd0fdc | 1234.567890123456 | 1234.567890123456 | \x40934a4584fd0fdc | t
\x405edd3c07fb4c93 | 123.4567890123456 | 123.4567890123456 | \x405edd3c07fb4c93 | t
\x4028b0fcd32f7076 | 12.34567890123456 | 12.34567890123456 | \x4028b0fcd32f7076 | t
\x3ff3c0ca428c59f8 | 1.234567890123456 | 1.234567890123456 | \x3ff3c0ca428c59f8 | t
\x3e60000000000000 | 2.9802322387695312e-08 | 2.9802322387695312e-08 | \x3e60000000000000 | t
\xc352bd2668e077c4 | -2.1098088986959632e+16 | -2.1098088986959632e+16 | \xc352bd2668e077c4 | t
\x434018601510c000 | 9.0608011534336e+15 | 9.0608011534336e+15 | \x434018601510c000 | t
\x43d055dc36f24000 | 4.708356024711512e+18 | 4.708356024711512e+18 | \x43d055dc36f24000 | t
\x43e052961c6f8000 | 9.409340012568248e+18 | 9.409340012568248e+18 | \x43e052961c6f8000 | t
\x3ff3c0ca2a5b1d5d | 1.2345678 | 1.2345678 | \x3ff3c0ca2a5b1d5d | t
\x4830f0cf064dd592 | 5.764607523034235e+39 | 5.764607523034235e+39 | \x4830f0cf064dd592 | t
\x4840f0cf064dd592 | 1.152921504606847e+40 | 1.152921504606847e+40 | \x4840f0cf064dd592 | t
\x4850f0cf064dd592 | 2.305843009213694e+40 | 2.305843009213694e+40 | \x4850f0cf064dd592 | t
\x3ff3333333333333 | 1.2 | 1.2 | \x3ff3333333333333 | t
\x3ff3ae147ae147ae | 1.23 | 1.23 | \x3ff3ae147ae147ae | t
\x3ff3be76c8b43958 | 1.234 | 1.234 | \x3ff3be76c8b43958 | t
\x3ff3c083126e978d | 1.2345 | 1.2345 | \x3ff3c083126e978d | t
\x3ff3c0c1fc8f3238 | 1.23456 | 1.23456 | \x3ff3c0c1fc8f3238 | t
\x3ff3c0c9539b8887 | 1.234567 | 1.234567 | \x3ff3c0c9539b8887 | t
\x3ff3c0ca2a5b1d5d | 1.2345678 | 1.2345678 | \x3ff3c0ca2a5b1d5d | t
\x3ff3c0ca4283de1b | 1.23456789 | 1.23456789 | \x3ff3c0ca4283de1b | t
\x3ff3c0ca43db770a | 1.234567895 | 1.234567895 | \x3ff3c0ca43db770a | t
\x3ff3c0ca428abd53 | 1.2345678901 | 1.2345678901 | \x3ff3c0ca428abd53 | t
\x3ff3c0ca428c1d2b | 1.23456789012 | 1.23456789012 | \x3ff3c0ca428c1d2b | t
\x3ff3c0ca428c51f2 | 1.234567890123 | 1.234567890123 | \x3ff3c0ca428c51f2 | t
\x3ff3c0ca428c58fc | 1.2345678901234 | 1.2345678901234 | \x3ff3c0ca428c58fc | t
\x3ff3c0ca428c59dd | 1.23456789012345 | 1.23456789012345 | \x3ff3c0ca428c59dd | t
\x3ff3c0ca428c59f8 | 1.234567890123456 | 1.234567890123456 | \x3ff3c0ca428c59f8 | t
\x3ff3c0ca428c59fb | 1.2345678901234567 | 1.2345678901234567 | \x3ff3c0ca428c59fb | t
\x40112e0be8047a7d | 4.294967294 | 4.294967294 | \x40112e0be8047a7d | t
\x40112e0be815a889 | 4.294967295 | 4.294967295 | \x40112e0be815a889 | t
\x40112e0be826d695 | 4.294967296 | 4.294967296 | \x40112e0be826d695 | t
\x40112e0be83804a1 | 4.294967297 | 4.294967297 | \x40112e0be83804a1 | t
\x40112e0be84932ad | 4.294967298 | 4.294967298 | \x40112e0be84932ad | t
\x0040000000000000 | 1.7800590868057611e-307 | 1.7800590868057611e-307 | \x0040000000000000 | t
\x007fffffffffffff | 2.8480945388892175e-306 | 2.8480945388892175e-306 | \x007fffffffffffff | t
\x0290000000000000 | 2.446494580089078e-296 | 2.446494580089078e-296 | \x0290000000000000 | t
\x029fffffffffffff | 4.8929891601781557e-296 | 4.8929891601781557e-296 | \x029fffffffffffff | t
\x4350000000000000 | 1.8014398509481984e+16 | 1.8014398509481984e+16 | \x4350000000000000 | t
\x435fffffffffffff | 3.6028797018963964e+16 | 3.6028797018963964e+16 | \x435fffffffffffff | t
\x1330000000000000 | 2.900835519859558e-216 | 2.900835519859558e-216 | \x1330000000000000 | t
\x133fffffffffffff | 5.801671039719115e-216 | 5.801671039719115e-216 | \x133fffffffffffff | t
\x3a6fa7161a4d6e0c | 3.196104012172126e-27 | 3.196104012172126e-27 | \x3a6fa7161a4d6e0c | t
(209 rows)
-- clean up, lest opr_sanity complain
drop type xfloat8 cascade;
NOTICE: drop cascades to 6 other objects
DETAIL: drop cascades to function xfloat8in(cstring)
drop cascades to function xfloat8out(xfloat8)
drop cascades to cast from xfloat8 to double precision
drop cascades to cast from double precision to xfloat8
drop cascades to cast from xfloat8 to bigint
drop cascades to cast from bigint to xfloat8