float8.sql 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. --
  2. -- FLOAT8
  3. --
  4. CREATE TABLE FLOAT8_TBL(f1 float8);
  5. INSERT INTO FLOAT8_TBL(f1) VALUES (' 0.0 ');
  6. INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30 ');
  7. INSERT INTO FLOAT8_TBL(f1) VALUES (' -34.84');
  8. INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');
  9. INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');
  10. -- test for underflow and overflow handling
  11. SELECT '10e400'::float8;
  12. SELECT '-10e400'::float8;
  13. SELECT '10e-400'::float8;
  14. SELECT '-10e-400'::float8;
  15. -- test smallest normalized input
  16. SELECT float8send('2.2250738585072014E-308'::float8);
  17. -- bad input
  18. INSERT INTO FLOAT8_TBL(f1) VALUES ('');
  19. INSERT INTO FLOAT8_TBL(f1) VALUES (' ');
  20. INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
  21. INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
  22. INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
  23. INSERT INTO FLOAT8_TBL(f1) VALUES ('5. 0');
  24. INSERT INTO FLOAT8_TBL(f1) VALUES (' - 3');
  25. INSERT INTO FLOAT8_TBL(f1) VALUES ('123 5');
  26. -- special inputs
  27. SELECT 'NaN'::float8;
  28. SELECT 'nan'::float8;
  29. SELECT ' NAN '::float8;
  30. SELECT 'infinity'::float8;
  31. SELECT ' -INFINiTY '::float8;
  32. -- bad special inputs
  33. SELECT 'N A N'::float8;
  34. SELECT 'NaN x'::float8;
  35. SELECT ' INFINITY x'::float8;
  36. SELECT 'Infinity'::float8 + 100.0;
  37. SELECT 'Infinity'::float8 / 'Infinity'::float8;
  38. SELECT '42'::float8 / 'Infinity'::float8;
  39. SELECT 'nan'::float8 / 'nan'::float8;
  40. SELECT 'nan'::float8 / '0'::float8;
  41. SELECT 'nan'::numeric::float8;
  42. SELECT * FROM FLOAT8_TBL;
  43. SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';
  44. SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';
  45. SELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;
  46. SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 < '1004.3';
  47. SELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;
  48. SELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3';
  49. SELECT f.f1, f.f1 * '-10' AS x
  50. FROM FLOAT8_TBL f
  51. WHERE f.f1 > '0.0';
  52. SELECT f.f1, f.f1 + '-10' AS x
  53. FROM FLOAT8_TBL f
  54. WHERE f.f1 > '0.0';
  55. SELECT f.f1, f.f1 / '-10' AS x
  56. FROM FLOAT8_TBL f
  57. WHERE f.f1 > '0.0';
  58. SELECT f.f1, f.f1 - '-10' AS x
  59. FROM FLOAT8_TBL f
  60. WHERE f.f1 > '0.0';
  61. SELECT f.f1 ^ '2.0' AS square_f1
  62. FROM FLOAT8_TBL f where f.f1 = '1004.3';
  63. -- absolute value
  64. SELECT f.f1, @f.f1 AS abs_f1
  65. FROM FLOAT8_TBL f;
  66. -- truncate
  67. SELECT f.f1, trunc(f.f1) AS trunc_f1
  68. FROM FLOAT8_TBL f;
  69. -- round
  70. SELECT f.f1, round(f.f1) AS round_f1
  71. FROM FLOAT8_TBL f;
  72. -- ceil / ceiling
  73. select ceil(f1) as ceil_f1 from float8_tbl f;
  74. select ceiling(f1) as ceiling_f1 from float8_tbl f;
  75. -- floor
  76. select floor(f1) as floor_f1 from float8_tbl f;
  77. -- sign
  78. select sign(f1) as sign_f1 from float8_tbl f;
  79. -- avoid bit-exact output here because operations may not be bit-exact.
  80. SET extra_float_digits = 0;
  81. -- square root
  82. SELECT sqrt(float8 '64') AS eight;
  83. SELECT |/ float8 '64' AS eight;
  84. SELECT f.f1, |/f.f1 AS sqrt_f1
  85. FROM FLOAT8_TBL f
  86. WHERE f.f1 > '0.0';
  87. -- power
  88. SELECT power(float8 '144', float8 '0.5');
  89. SELECT power(float8 'NaN', float8 '0.5');
  90. SELECT power(float8 '144', float8 'NaN');
  91. SELECT power(float8 'NaN', float8 'NaN');
  92. SELECT power(float8 '-1', float8 'NaN');
  93. SELECT power(float8 '1', float8 'NaN');
  94. SELECT power(float8 'NaN', float8 '0');
  95. SELECT power(float8 'inf', float8 '0');
  96. SELECT power(float8 '-inf', float8 '0');
  97. SELECT power(float8 '0', float8 'inf');
  98. SELECT power(float8 '0', float8 '-inf');
  99. SELECT power(float8 '1', float8 'inf');
  100. SELECT power(float8 '1', float8 '-inf');
  101. SELECT power(float8 '-1', float8 'inf');
  102. SELECT power(float8 '-1', float8 '-inf');
  103. SELECT power(float8 '0.1', float8 'inf');
  104. SELECT power(float8 '-0.1', float8 'inf');
  105. SELECT power(float8 '1.1', float8 'inf');
  106. SELECT power(float8 '-1.1', float8 'inf');
  107. SELECT power(float8 '0.1', float8 '-inf');
  108. SELECT power(float8 '-0.1', float8 '-inf');
  109. SELECT power(float8 '1.1', float8 '-inf');
  110. SELECT power(float8 '-1.1', float8 '-inf');
  111. SELECT power(float8 'inf', float8 '-2');
  112. SELECT power(float8 'inf', float8 '2');
  113. SELECT power(float8 'inf', float8 'inf');
  114. SELECT power(float8 'inf', float8 '-inf');
  115. -- Intel's icc misoptimizes the code that controls the sign of this result,
  116. -- even with -mp1. Pending a fix for that, only test for "is it zero".
  117. SELECT power(float8 '-inf', float8 '-2') = '0';
  118. SELECT power(float8 '-inf', float8 '-3');
  119. SELECT power(float8 '-inf', float8 '2');
  120. SELECT power(float8 '-inf', float8 '3');
  121. SELECT power(float8 '-inf', float8 '3.5');
  122. SELECT power(float8 '-inf', float8 'inf');
  123. SELECT power(float8 '-inf', float8 '-inf');
  124. -- take exp of ln(f.f1)
  125. SELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1
  126. FROM FLOAT8_TBL f
  127. WHERE f.f1 > '0.0';
  128. -- check edge cases for exp
  129. SELECT exp('inf'::float8), exp('-inf'::float8), exp('nan'::float8);
  130. -- cube root
  131. SELECT ||/ float8 '27' AS three;
  132. SELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
  133. SELECT * FROM FLOAT8_TBL;
  134. UPDATE FLOAT8_TBL
  135. SET f1 = FLOAT8_TBL.f1 * '-1'
  136. WHERE FLOAT8_TBL.f1 > '0.0';
  137. SELECT f.f1 * '1e200' from FLOAT8_TBL f;
  138. SELECT f.f1 ^ '1e200' from FLOAT8_TBL f;
  139. SELECT 0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5;
  140. SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
  141. SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
  142. SELECT exp(f.f1) from FLOAT8_TBL f;
  143. SELECT f.f1 / '0.0' from FLOAT8_TBL f;
  144. SELECT * FROM FLOAT8_TBL;
  145. -- hyperbolic functions
  146. -- we run these with extra_float_digits = 0 too, since different platforms
  147. -- tend to produce results that vary in the last place.
  148. SELECT sinh(float8 '1');
  149. SELECT cosh(float8 '1');
  150. SELECT tanh(float8 '1');
  151. SELECT asinh(float8 '1');
  152. SELECT acosh(float8 '2');
  153. SELECT atanh(float8 '0.5');
  154. -- test Inf/NaN cases for hyperbolic functions
  155. SELECT sinh(float8 'infinity');
  156. SELECT sinh(float8 '-infinity');
  157. SELECT sinh(float8 'nan');
  158. SELECT cosh(float8 'infinity');
  159. SELECT cosh(float8 '-infinity');
  160. SELECT cosh(float8 'nan');
  161. SELECT tanh(float8 'infinity');
  162. SELECT tanh(float8 '-infinity');
  163. SELECT tanh(float8 'nan');
  164. SELECT asinh(float8 'infinity');
  165. SELECT asinh(float8 '-infinity');
  166. SELECT asinh(float8 'nan');
  167. -- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test
  168. -- SELECT acosh(float8 'infinity');
  169. SELECT acosh(float8 '-infinity');
  170. SELECT acosh(float8 'nan');
  171. SELECT atanh(float8 'infinity');
  172. SELECT atanh(float8 '-infinity');
  173. SELECT atanh(float8 'nan');
  174. RESET extra_float_digits;
  175. -- test for over- and underflow
  176. INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
  177. INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
  178. INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
  179. INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
  180. -- maintain external table consistency across platforms
  181. -- delete all values and reinsert well-behaved ones
  182. DELETE FROM FLOAT8_TBL;
  183. INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
  184. INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
  185. INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
  186. INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
  187. INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
  188. SELECT * FROM FLOAT8_TBL;
  189. -- test edge-case coercions to integer
  190. SELECT '32767.4'::float8::int2;
  191. SELECT '32767.6'::float8::int2;
  192. SELECT '-32768.4'::float8::int2;
  193. SELECT '-32768.6'::float8::int2;
  194. SELECT '2147483647.4'::float8::int4;
  195. SELECT '2147483647.6'::float8::int4;
  196. SELECT '-2147483648.4'::float8::int4;
  197. SELECT '-2147483648.6'::float8::int4;
  198. SELECT '9223372036854773760'::float8::int8;
  199. SELECT '9223372036854775807'::float8::int8;
  200. SELECT '-9223372036854775808.5'::float8::int8;
  201. SELECT '-9223372036854780000'::float8::int8;
  202. -- test exact cases for trigonometric functions in degrees
  203. SELECT x,
  204. sind(x),
  205. sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
  206. FROM (VALUES (0), (30), (90), (150), (180),
  207. (210), (270), (330), (360)) AS t(x);
  208. SELECT x,
  209. cosd(x),
  210. cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
  211. FROM (VALUES (0), (60), (90), (120), (180),
  212. (240), (270), (300), (360)) AS t(x);
  213. SELECT x,
  214. tand(x),
  215. tand(x) IN ('-Infinity'::float8,-1,0,
  216. 1,'Infinity'::float8) AS tand_exact,
  217. cotd(x),
  218. cotd(x) IN ('-Infinity'::float8,-1,0,
  219. 1,'Infinity'::float8) AS cotd_exact
  220. FROM (VALUES (0), (45), (90), (135), (180),
  221. (225), (270), (315), (360)) AS t(x);
  222. SELECT x,
  223. asind(x),
  224. asind(x) IN (-90,-30,0,30,90) AS asind_exact,
  225. acosd(x),
  226. acosd(x) IN (0,60,90,120,180) AS acosd_exact
  227. FROM (VALUES (-1), (-0.5), (0), (0.5), (1)) AS t(x);
  228. SELECT x,
  229. atand(x),
  230. atand(x) IN (-90,-45,0,45,90) AS atand_exact
  231. FROM (VALUES ('-Infinity'::float8), (-1), (0), (1),
  232. ('Infinity'::float8)) AS t(x);
  233. SELECT x, y,
  234. atan2d(y, x),
  235. atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact
  236. FROM (SELECT 10*cosd(a), 10*sind(a)
  237. FROM generate_series(0, 360, 90) AS t(a)) AS t(x,y);
  238. --
  239. -- test output (and round-trip safety) of various values.
  240. -- To ensure we're testing what we think we're testing, start with
  241. -- float values specified by bit patterns (as a useful side effect,
  242. -- this means we'll fail on non-IEEE platforms).
  243. create type xfloat8;
  244. create function xfloat8in(cstring) returns xfloat8 immutable strict
  245. language internal as 'int8in';
  246. create function xfloat8out(xfloat8) returns cstring immutable strict
  247. language internal as 'int8out';
  248. create type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);
  249. create cast (xfloat8 as float8) without function;
  250. create cast (float8 as xfloat8) without function;
  251. create cast (xfloat8 as bigint) without function;
  252. create cast (bigint as xfloat8) without function;
  253. -- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)
  254. -- we don't care to assume the platform's strtod() handles subnormals
  255. -- correctly; those are "use at your own risk". However we do test
  256. -- subnormal outputs, since those are under our control.
  257. with testdata(bits) as (values
  258. -- small subnormals
  259. (x'0000000000000001'),
  260. (x'0000000000000002'), (x'0000000000000003'),
  261. (x'0000000000001000'), (x'0000000100000000'),
  262. (x'0000010000000000'), (x'0000010100000000'),
  263. (x'0000400000000000'), (x'0000400100000000'),
  264. (x'0000800000000000'), (x'0000800000000001'),
  265. -- these values taken from upstream testsuite
  266. (x'00000000000f4240'),
  267. (x'00000000016e3600'),
  268. (x'0000008cdcdea440'),
  269. -- borderline between subnormal and normal
  270. (x'000ffffffffffff0'), (x'000ffffffffffff1'),
  271. (x'000ffffffffffffe'), (x'000fffffffffffff'))
  272. select float8send(flt) as ibits,
  273. flt
  274. from (select bits::bigint::xfloat8::float8 as flt
  275. from testdata
  276. offset 0) s;
  277. -- round-trip tests
  278. with testdata(bits) as (values
  279. (x'0000000000000000'),
  280. -- smallest normal values
  281. (x'0010000000000000'), (x'0010000000000001'),
  282. (x'0010000000000002'), (x'0018000000000000'),
  283. --
  284. (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),
  285. (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),
  286. (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),
  287. (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),
  288. (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),
  289. (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),
  290. (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),
  291. (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),
  292. (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),
  293. (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),
  294. -- values very close to 1
  295. (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),
  296. (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),
  297. (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),
  298. (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),
  299. (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),
  300. (x'3fefffffffffffff'),
  301. (x'3ff0000000000000'),
  302. (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),
  303. (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),
  304. (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),
  305. --
  306. (x'3ff921fb54442d18'),
  307. (x'4005bf0a8b14576a'),
  308. (x'400921fb54442d18'),
  309. --
  310. (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),
  311. (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),
  312. (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),
  313. (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),
  314. (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),
  315. (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),
  316. (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),
  317. (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),
  318. (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),
  319. (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),
  320. (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),
  321. (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),
  322. (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),
  323. (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),
  324. (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),
  325. (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),
  326. (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),
  327. (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),
  328. (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),
  329. (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),
  330. (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),
  331. (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),
  332. (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),
  333. (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),
  334. (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),
  335. --
  336. (x'7feffffffffffffe'), (x'7fefffffffffffff'),
  337. -- round to even tests (+ve)
  338. (x'4350000000000002'),
  339. (x'4350000000002e06'),
  340. (x'4352000000000003'),
  341. (x'4352000000000004'),
  342. (x'4358000000000003'),
  343. (x'4358000000000004'),
  344. (x'435f000000000020'),
  345. -- round to even tests (-ve)
  346. (x'c350000000000002'),
  347. (x'c350000000002e06'),
  348. (x'c352000000000003'),
  349. (x'c352000000000004'),
  350. (x'c358000000000003'),
  351. (x'c358000000000004'),
  352. (x'c35f000000000020'),
  353. -- exercise fixed-point memmoves
  354. (x'42dc12218377de66'),
  355. (x'42a674e79c5fe51f'),
  356. (x'4271f71fb04cb74c'),
  357. (x'423cbe991a145879'),
  358. (x'4206fee0e1a9e061'),
  359. (x'41d26580b487e6b4'),
  360. (x'419d6f34540ca453'),
  361. (x'41678c29dcd6e9dc'),
  362. (x'4132d687e3df217d'),
  363. (x'40fe240c9fcb68c8'),
  364. (x'40c81cd6e63c53d3'),
  365. (x'40934a4584fd0fdc'),
  366. (x'405edd3c07fb4c93'),
  367. (x'4028b0fcd32f7076'),
  368. (x'3ff3c0ca428c59f8'),
  369. -- these cases come from the upstream's testsuite
  370. -- LotsOfTrailingZeros)
  371. (x'3e60000000000000'),
  372. -- Regression
  373. (x'c352bd2668e077c4'),
  374. (x'434018601510c000'),
  375. (x'43d055dc36f24000'),
  376. (x'43e052961c6f8000'),
  377. (x'3ff3c0ca2a5b1d5d'),
  378. -- LooksLikePow5
  379. (x'4830f0cf064dd592'),
  380. (x'4840f0cf064dd592'),
  381. (x'4850f0cf064dd592'),
  382. -- OutputLength
  383. (x'3ff3333333333333'),
  384. (x'3ff3ae147ae147ae'),
  385. (x'3ff3be76c8b43958'),
  386. (x'3ff3c083126e978d'),
  387. (x'3ff3c0c1fc8f3238'),
  388. (x'3ff3c0c9539b8887'),
  389. (x'3ff3c0ca2a5b1d5d'),
  390. (x'3ff3c0ca4283de1b'),
  391. (x'3ff3c0ca43db770a'),
  392. (x'3ff3c0ca428abd53'),
  393. (x'3ff3c0ca428c1d2b'),
  394. (x'3ff3c0ca428c51f2'),
  395. (x'3ff3c0ca428c58fc'),
  396. (x'3ff3c0ca428c59dd'),
  397. (x'3ff3c0ca428c59f8'),
  398. (x'3ff3c0ca428c59fb'),
  399. -- 32-bit chunking
  400. (x'40112e0be8047a7d'),
  401. (x'40112e0be815a889'),
  402. (x'40112e0be826d695'),
  403. (x'40112e0be83804a1'),
  404. (x'40112e0be84932ad'),
  405. -- MinMaxShift
  406. (x'0040000000000000'),
  407. (x'007fffffffffffff'),
  408. (x'0290000000000000'),
  409. (x'029fffffffffffff'),
  410. (x'4350000000000000'),
  411. (x'435fffffffffffff'),
  412. (x'1330000000000000'),
  413. (x'133fffffffffffff'),
  414. (x'3a6fa7161a4d6e0c')
  415. )
  416. select float8send(flt) as ibits,
  417. flt,
  418. flt::text::float8 as r_flt,
  419. float8send(flt::text::float8) as obits,
  420. float8send(flt::text::float8) = float8send(flt) as correct
  421. from (select bits::bigint::xfloat8::float8 as flt
  422. from testdata
  423. offset 0) s;
  424. -- clean up, lest opr_sanity complain
  425. drop type xfloat8 cascade;