Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / src / test / regress / expected / float8.out
blobe9e71bb7aa10a957e77b3cfc48ff19f3a5e54351
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 ERROR:  "10e400" is out of range for type double precision
13 LINE 1: SELECT '10e400'::float8;
14                ^
15 SELECT '-10e400'::float8;
16 ERROR:  "-10e400" is out of range for type double precision
17 LINE 1: SELECT '-10e400'::float8;
18                ^
19 SELECT '10e-400'::float8;
20 ERROR:  "10e-400" is out of range for type double precision
21 LINE 1: SELECT '10e-400'::float8;
22                ^
23 SELECT '-10e-400'::float8;
24 ERROR:  "-10e-400" is out of range for type double precision
25 LINE 1: SELECT '-10e-400'::float8;
26                ^
27 -- bad input
28 INSERT INTO FLOAT8_TBL(f1) VALUES ('');
29 ERROR:  invalid input syntax for type double precision: ""
30 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('');
31                                            ^
32 INSERT INTO FLOAT8_TBL(f1) VALUES ('     ');
33 ERROR:  invalid input syntax for type double precision: "     "
34 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('     ');
35                                            ^
36 INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
37 ERROR:  invalid input syntax for type double precision: "xyz"
38 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');
39                                            ^
40 INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
41 ERROR:  invalid input syntax for type double precision: "5.0.0"
42 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');
43                                            ^
44 INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
45 ERROR:  invalid input syntax for type double precision: "5 . 0"
46 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');
47                                            ^
48 INSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');
49 ERROR:  invalid input syntax for type double precision: "5.   0"
50 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');
51                                            ^
52 INSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');
53 ERROR:  invalid input syntax for type double precision: "    - 3"
54 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');
55                                            ^
56 INSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');
57 ERROR:  invalid input syntax for type double precision: "123           5"
58 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');
59                                            ^
60 -- special inputs
61 SELECT 'NaN'::float8;
62  float8 
63 --------
64     NaN
65 (1 row)
67 SELECT 'nan'::float8;
68  float8 
69 --------
70     NaN
71 (1 row)
73 SELECT '   NAN  '::float8;
74  float8 
75 --------
76     NaN
77 (1 row)
79 SELECT 'infinity'::float8;
80   float8  
81 ----------
82  Infinity
83 (1 row)
85 SELECT '          -INFINiTY   '::float8;
86   float8   
87 -----------
88  -Infinity
89 (1 row)
91 -- bad special inputs
92 SELECT 'N A N'::float8;
93 ERROR:  invalid input syntax for type double precision: "N A N"
94 LINE 1: SELECT 'N A N'::float8;
95                ^
96 SELECT 'NaN x'::float8;
97 ERROR:  invalid input syntax for type double precision: "NaN x"
98 LINE 1: SELECT 'NaN x'::float8;
99                ^
100 SELECT ' INFINITY    x'::float8;
101 ERROR:  invalid input syntax for type double precision: " INFINITY    x"
102 LINE 1: SELECT ' INFINITY    x'::float8;
103                ^
104 SELECT 'Infinity'::float8 + 100.0;
105  ?column? 
106 ----------
107  Infinity
108 (1 row)
110 SELECT 'Infinity'::float8 / 'Infinity'::float8;
111  ?column? 
112 ----------
113       NaN
114 (1 row)
116 SELECT 'nan'::float8 / 'nan'::float8;
117  ?column? 
118 ----------
119       NaN
120 (1 row)
122 SELECT '' AS five, * FROM FLOAT8_TBL;
123  five |          f1          
124 ------+----------------------
125       |                    0
126       |               1004.3
127       |               -34.84
128       | 1.2345678901234e+200
129       | 1.2345678901234e-200
130 (5 rows)
132 SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';
133  four |          f1          
134 ------+----------------------
135       |                    0
136       |               -34.84
137       | 1.2345678901234e+200
138       | 1.2345678901234e-200
139 (4 rows)
141 SELECT '' AS one, f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';
142  one |   f1   
143 -----+--------
144      | 1004.3
145 (1 row)
147 SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;
148  three |          f1          
149 -------+----------------------
150        |                    0
151        |               -34.84
152        | 1.2345678901234e-200
153 (3 rows)
155 SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';
156  three |          f1          
157 -------+----------------------
158        |                    0
159        |               -34.84
160        | 1.2345678901234e-200
161 (3 rows)
163 SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;
164  four |          f1          
165 ------+----------------------
166       |                    0
167       |               1004.3
168       |               -34.84
169       | 1.2345678901234e-200
170 (4 rows)
172 SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';
173  four |          f1          
174 ------+----------------------
175       |                    0
176       |               1004.3
177       |               -34.84
178       | 1.2345678901234e-200
179 (4 rows)
181 SELECT '' AS three, f.f1, f.f1 * '-10' AS x 
182    FROM FLOAT8_TBL f
183    WHERE f.f1 > '0.0';
184  three |          f1          |           x           
185 -------+----------------------+-----------------------
186        |               1004.3 |                -10043
187        | 1.2345678901234e+200 | -1.2345678901234e+201
188        | 1.2345678901234e-200 | -1.2345678901234e-199
189 (3 rows)
191 SELECT '' AS three, f.f1, f.f1 + '-10' AS x
192    FROM FLOAT8_TBL f
193    WHERE f.f1 > '0.0';
194  three |          f1          |          x           
195 -------+----------------------+----------------------
196        |               1004.3 |                994.3
197        | 1.2345678901234e+200 | 1.2345678901234e+200
198        | 1.2345678901234e-200 |                  -10
199 (3 rows)
201 SELECT '' AS three, f.f1, f.f1 / '-10' AS x
202    FROM FLOAT8_TBL f
203    WHERE f.f1 > '0.0';
204  three |          f1          |           x           
205 -------+----------------------+-----------------------
206        |               1004.3 |               -100.43
207        | 1.2345678901234e+200 | -1.2345678901234e+199
208        | 1.2345678901234e-200 | -1.2345678901234e-201
209 (3 rows)
211 SELECT '' AS three, f.f1, f.f1 - '-10' AS x
212    FROM FLOAT8_TBL f
213    WHERE f.f1 > '0.0';
214  three |          f1          |          x           
215 -------+----------------------+----------------------
216        |               1004.3 |               1014.3
217        | 1.2345678901234e+200 | 1.2345678901234e+200
218        | 1.2345678901234e-200 |                   10
219 (3 rows)
221 SELECT '' AS one, f.f1 ^ '2.0' AS square_f1
222    FROM FLOAT8_TBL f where f.f1 = '1004.3';
223  one | square_f1  
224 -----+------------
225      | 1008618.49
226 (1 row)
228 -- absolute value 
229 SELECT '' AS five, f.f1, @f.f1 AS abs_f1 
230    FROM FLOAT8_TBL f;
231  five |          f1          |        abs_f1        
232 ------+----------------------+----------------------
233       |                    0 |                    0
234       |               1004.3 |               1004.3
235       |               -34.84 |                34.84
236       | 1.2345678901234e+200 | 1.2345678901234e+200
237       | 1.2345678901234e-200 | 1.2345678901234e-200
238 (5 rows)
240 -- truncate 
241 SELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1
242    FROM FLOAT8_TBL f;
243  five |          f1          |       trunc_f1       
244 ------+----------------------+----------------------
245       |                    0 |                    0
246       |               1004.3 |                 1004
247       |               -34.84 |                  -34
248       | 1.2345678901234e+200 | 1.2345678901234e+200
249       | 1.2345678901234e-200 |                    0
250 (5 rows)
252 -- round 
253 SELECT '' AS five, f.f1, round(f.f1) AS round_f1
254    FROM FLOAT8_TBL f;
255  five |          f1          |       round_f1       
256 ------+----------------------+----------------------
257       |                    0 |                    0
258       |               1004.3 |                 1004
259       |               -34.84 |                  -35
260       | 1.2345678901234e+200 | 1.2345678901234e+200
261       | 1.2345678901234e-200 |                    0
262 (5 rows)
264 -- ceil / ceiling
265 select ceil(f1) as ceil_f1 from float8_tbl f;
266        ceil_f1        
267 ----------------------
268                     0
269                  1005
270                   -34
271  1.2345678901234e+200
272                     1
273 (5 rows)
275 select ceiling(f1) as ceiling_f1 from float8_tbl f;
276       ceiling_f1      
277 ----------------------
278                     0
279                  1005
280                   -34
281  1.2345678901234e+200
282                     1
283 (5 rows)
285 -- floor
286 select floor(f1) as floor_f1 from float8_tbl f;
287        floor_f1       
288 ----------------------
289                     0
290                  1004
291                   -35
292  1.2345678901234e+200
293                     0
294 (5 rows)
296 -- sign
297 select sign(f1) as sign_f1 from float8_tbl f;
298  sign_f1 
299 ---------
300        0
301        1
302       -1
303        1
304        1
305 (5 rows)
307 -- square root 
308 SELECT sqrt(float8 '64') AS eight;
309  eight 
310 -------
311      8
312 (1 row)
314 SELECT |/ float8 '64' AS eight;
315  eight 
316 -------
317      8
318 (1 row)
320 SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
321    FROM FLOAT8_TBL f
322    WHERE f.f1 > '0.0';
323  three |          f1          |        sqrt_f1        
324 -------+----------------------+-----------------------
325        |               1004.3 |      31.6906926399535
326        | 1.2345678901234e+200 | 1.11111110611109e+100
327        | 1.2345678901234e-200 | 1.11111110611109e-100
328 (3 rows)
330 -- power
331 SELECT power(float8 '144', float8 '0.5');
332  power 
333 -------
334     12
335 (1 row)
337 -- take exp of ln(f.f1) 
338 SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
339    FROM FLOAT8_TBL f
340    WHERE f.f1 > '0.0';
341  three |          f1          |       exp_ln_f1       
342 -------+----------------------+-----------------------
343        |               1004.3 |                1004.3
344        | 1.2345678901234e+200 | 1.23456789012338e+200
345        | 1.2345678901234e-200 | 1.23456789012339e-200
346 (3 rows)
348 -- cube root 
349 SELECT ||/ float8 '27' AS three;
350  three 
351 -------
352      3
353 (1 row)
355 SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
356  five |          f1          |       cbrt_f1        
357 ------+----------------------+----------------------
358       |                    0 |                    0
359       |               1004.3 |      10.014312837827
360       |               -34.84 |    -3.26607421344208
361       | 1.2345678901234e+200 | 4.97933859234765e+66
362       | 1.2345678901234e-200 |  2.3112042409018e-67
363 (5 rows)
365 SELECT '' AS five, * FROM FLOAT8_TBL;
366  five |          f1          
367 ------+----------------------
368       |                    0
369       |               1004.3
370       |               -34.84
371       | 1.2345678901234e+200
372       | 1.2345678901234e-200
373 (5 rows)
375 UPDATE FLOAT8_TBL
376    SET f1 = FLOAT8_TBL.f1 * '-1'
377    WHERE FLOAT8_TBL.f1 > '0.0';
378 SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;
379 ERROR:  value out of range: overflow
380 SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;
381 ERROR:  value out of range: overflow
382 SELECT 0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5;
383  ?column? 
384 ----------
385         2
386 (1 row)
388 SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
389 ERROR:  cannot take logarithm of zero
390 SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
391 ERROR:  cannot take logarithm of a negative number
392 SELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;
393 ERROR:  value out of range: underflow
394 SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
395 ERROR:  division by zero
396 SELECT '' AS five, * FROM FLOAT8_TBL;
397  five |          f1           
398 ------+-----------------------
399       |                     0
400       |                -34.84
401       |               -1004.3
402       | -1.2345678901234e+200
403       | -1.2345678901234e-200
404 (5 rows)
406 -- test for over- and underflow 
407 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
408 ERROR:  "10e400" is out of range for type double precision
409 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
410                                            ^
411 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
412 ERROR:  "-10e400" is out of range for type double precision
413 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
414                                            ^
415 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
416 ERROR:  "10e-400" is out of range for type double precision
417 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
418                                            ^
419 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
420 ERROR:  "-10e-400" is out of range for type double precision
421 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
422                                            ^
423 -- maintain external table consistency across platforms
424 -- delete all values and reinsert well-behaved ones
425 DELETE FROM FLOAT8_TBL;
426 INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
427 INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
428 INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
429 INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
430 INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
431 SELECT '' AS five, * FROM FLOAT8_TBL;
432  five |          f1           
433 ------+-----------------------
434       |                     0
435       |                -34.84
436       |               -1004.3
437       | -1.2345678901234e+200
438       | -1.2345678901234e-200
439 (5 rows)