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