]> granicus.if.org Git - postgresql/blob - src/test/regress/expected/float8.out
Don't allow logging in with empty password.
[postgresql] / src / test / regress / expected / float8.out
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)
66
67 SELECT 'nan'::float8;
68  float8 
69 --------
70     NaN
71 (1 row)
72
73 SELECT '   NAN  '::float8;
74  float8 
75 --------
76     NaN
77 (1 row)
78
79 SELECT 'infinity'::float8;
80   float8  
81 ----------
82  Infinity
83 (1 row)
84
85 SELECT '          -INFINiTY   '::float8;
86   float8   
87 -----------
88  -Infinity
89 (1 row)
90
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)
109
110 SELECT 'Infinity'::float8 / 'Infinity'::float8;
111  ?column? 
112 ----------
113       NaN
114 (1 row)
115
116 SELECT 'nan'::float8 / 'nan'::float8;
117  ?column? 
118 ----------
119       NaN
120 (1 row)
121
122 SELECT 'nan'::numeric::float8;
123  float8 
124 --------
125     NaN
126 (1 row)
127
128 SELECT '' AS five, * FROM FLOAT8_TBL;
129  five |          f1          
130 ------+----------------------
131       |                    0
132       |               1004.3
133       |               -34.84
134       | 1.2345678901234e+200
135       | 1.2345678901234e-200
136 (5 rows)
137
138 SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';
139  four |          f1          
140 ------+----------------------
141       |                    0
142       |               -34.84
143       | 1.2345678901234e+200
144       | 1.2345678901234e-200
145 (4 rows)
146
147 SELECT '' AS one, f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';
148  one |   f1   
149 -----+--------
150      | 1004.3
151 (1 row)
152
153 SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;
154  three |          f1          
155 -------+----------------------
156        |                    0
157        |               -34.84
158        | 1.2345678901234e-200
159 (3 rows)
160
161 SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';
162  three |          f1          
163 -------+----------------------
164        |                    0
165        |               -34.84
166        | 1.2345678901234e-200
167 (3 rows)
168
169 SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;
170  four |          f1          
171 ------+----------------------
172       |                    0
173       |               1004.3
174       |               -34.84
175       | 1.2345678901234e-200
176 (4 rows)
177
178 SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';
179  four |          f1          
180 ------+----------------------
181       |                    0
182       |               1004.3
183       |               -34.84
184       | 1.2345678901234e-200
185 (4 rows)
186
187 SELECT '' AS three, f.f1, f.f1 * '-10' AS x
188    FROM FLOAT8_TBL f
189    WHERE f.f1 > '0.0';
190  three |          f1          |           x           
191 -------+----------------------+-----------------------
192        |               1004.3 |                -10043
193        | 1.2345678901234e+200 | -1.2345678901234e+201
194        | 1.2345678901234e-200 | -1.2345678901234e-199
195 (3 rows)
196
197 SELECT '' AS three, f.f1, f.f1 + '-10' AS x
198    FROM FLOAT8_TBL f
199    WHERE f.f1 > '0.0';
200  three |          f1          |          x           
201 -------+----------------------+----------------------
202        |               1004.3 |                994.3
203        | 1.2345678901234e+200 | 1.2345678901234e+200
204        | 1.2345678901234e-200 |                  -10
205 (3 rows)
206
207 SELECT '' AS three, f.f1, f.f1 / '-10' AS x
208    FROM FLOAT8_TBL f
209    WHERE f.f1 > '0.0';
210  three |          f1          |           x           
211 -------+----------------------+-----------------------
212        |               1004.3 |               -100.43
213        | 1.2345678901234e+200 | -1.2345678901234e+199
214        | 1.2345678901234e-200 | -1.2345678901234e-201
215 (3 rows)
216
217 SELECT '' AS three, f.f1, f.f1 - '-10' AS x
218    FROM FLOAT8_TBL f
219    WHERE f.f1 > '0.0';
220  three |          f1          |          x           
221 -------+----------------------+----------------------
222        |               1004.3 |               1014.3
223        | 1.2345678901234e+200 | 1.2345678901234e+200
224        | 1.2345678901234e-200 |                   10
225 (3 rows)
226
227 SELECT '' AS one, f.f1 ^ '2.0' AS square_f1
228    FROM FLOAT8_TBL f where f.f1 = '1004.3';
229  one | square_f1  
230 -----+------------
231      | 1008618.49
232 (1 row)
233
234 -- absolute value
235 SELECT '' AS five, f.f1, @f.f1 AS abs_f1
236    FROM FLOAT8_TBL f;
237  five |          f1          |        abs_f1        
238 ------+----------------------+----------------------
239       |                    0 |                    0
240       |               1004.3 |               1004.3
241       |               -34.84 |                34.84
242       | 1.2345678901234e+200 | 1.2345678901234e+200
243       | 1.2345678901234e-200 | 1.2345678901234e-200
244 (5 rows)
245
246 -- truncate
247 SELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1
248    FROM FLOAT8_TBL f;
249  five |          f1          |       trunc_f1       
250 ------+----------------------+----------------------
251       |                    0 |                    0
252       |               1004.3 |                 1004
253       |               -34.84 |                  -34
254       | 1.2345678901234e+200 | 1.2345678901234e+200
255       | 1.2345678901234e-200 |                    0
256 (5 rows)
257
258 -- round
259 SELECT '' AS five, f.f1, round(f.f1) AS round_f1
260    FROM FLOAT8_TBL f;
261  five |          f1          |       round_f1       
262 ------+----------------------+----------------------
263       |                    0 |                    0
264       |               1004.3 |                 1004
265       |               -34.84 |                  -35
266       | 1.2345678901234e+200 | 1.2345678901234e+200
267       | 1.2345678901234e-200 |                    0
268 (5 rows)
269
270 -- ceil / ceiling
271 select ceil(f1) as ceil_f1 from float8_tbl f;
272        ceil_f1        
273 ----------------------
274                     0
275                  1005
276                   -34
277  1.2345678901234e+200
278                     1
279 (5 rows)
280
281 select ceiling(f1) as ceiling_f1 from float8_tbl f;
282       ceiling_f1      
283 ----------------------
284                     0
285                  1005
286                   -34
287  1.2345678901234e+200
288                     1
289 (5 rows)
290
291 -- floor
292 select floor(f1) as floor_f1 from float8_tbl f;
293        floor_f1       
294 ----------------------
295                     0
296                  1004
297                   -35
298  1.2345678901234e+200
299                     0
300 (5 rows)
301
302 -- sign
303 select sign(f1) as sign_f1 from float8_tbl f;
304  sign_f1 
305 ---------
306        0
307        1
308       -1
309        1
310        1
311 (5 rows)
312
313 -- square root
314 SELECT sqrt(float8 '64') AS eight;
315  eight 
316 -------
317      8
318 (1 row)
319
320 SELECT |/ float8 '64' AS eight;
321  eight 
322 -------
323      8
324 (1 row)
325
326 SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
327    FROM FLOAT8_TBL f
328    WHERE f.f1 > '0.0';
329  three |          f1          |        sqrt_f1        
330 -------+----------------------+-----------------------
331        |               1004.3 |      31.6906926399535
332        | 1.2345678901234e+200 | 1.11111110611109e+100
333        | 1.2345678901234e-200 | 1.11111110611109e-100
334 (3 rows)
335
336 -- power
337 SELECT power(float8 '144', float8 '0.5');
338  power 
339 -------
340     12
341 (1 row)
342
343 -- take exp of ln(f.f1)
344 SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
345    FROM FLOAT8_TBL f
346    WHERE f.f1 > '0.0';
347  three |          f1          |       exp_ln_f1       
348 -------+----------------------+-----------------------
349        |               1004.3 |                1004.3
350        | 1.2345678901234e+200 | 1.23456789012338e+200
351        | 1.2345678901234e-200 | 1.23456789012339e-200
352 (3 rows)
353
354 -- cube root
355 SELECT ||/ float8 '27' AS three;
356  three 
357 -------
358      3
359 (1 row)
360
361 SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
362  five |          f1          |       cbrt_f1        
363 ------+----------------------+----------------------
364       |                    0 |                    0
365       |               1004.3 |      10.014312837827
366       |               -34.84 |    -3.26607421344208
367       | 1.2345678901234e+200 | 4.97933859234765e+66
368       | 1.2345678901234e-200 |  2.3112042409018e-67
369 (5 rows)
370
371 SELECT '' AS five, * FROM FLOAT8_TBL;
372  five |          f1          
373 ------+----------------------
374       |                    0
375       |               1004.3
376       |               -34.84
377       | 1.2345678901234e+200
378       | 1.2345678901234e-200
379 (5 rows)
380
381 UPDATE FLOAT8_TBL
382    SET f1 = FLOAT8_TBL.f1 * '-1'
383    WHERE FLOAT8_TBL.f1 > '0.0';
384 SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;
385 ERROR:  value out of range: overflow
386 SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;
387 ERROR:  value out of range: overflow
388 SELECT 0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5;
389  ?column? 
390 ----------
391         2
392 (1 row)
393
394 SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
395 ERROR:  cannot take logarithm of zero
396 SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
397 ERROR:  cannot take logarithm of a negative number
398 SELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;
399 ERROR:  value out of range: underflow
400 SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
401 ERROR:  division by zero
402 SELECT '' AS five, * FROM FLOAT8_TBL;
403  five |          f1           
404 ------+-----------------------
405       |                     0
406       |                -34.84
407       |               -1004.3
408       | -1.2345678901234e+200
409       | -1.2345678901234e-200
410 (5 rows)
411
412 -- test for over- and underflow
413 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
414 ERROR:  "10e400" is out of range for type double precision
415 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
416                                            ^
417 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
418 ERROR:  "-10e400" is out of range for type double precision
419 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
420                                            ^
421 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
422 ERROR:  "10e-400" is out of range for type double precision
423 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');
424                                            ^
425 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
426 ERROR:  "-10e-400" is out of range for type double precision
427 LINE 1: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');
428                                            ^
429 -- maintain external table consistency across platforms
430 -- delete all values and reinsert well-behaved ones
431 DELETE FROM FLOAT8_TBL;
432 INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');
433 INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');
434 INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');
435 INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');
436 INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');
437 SELECT '' AS five, * FROM FLOAT8_TBL;
438  five |          f1           
439 ------+-----------------------
440       |                     0
441       |                -34.84
442       |               -1004.3
443       | -1.2345678901234e+200
444       | -1.2345678901234e-200
445 (5 rows)
446
447 -- test exact cases for trigonometric functions in degrees
448 SET extra_float_digits = 3;
449 SELECT x,
450        sind(x),
451        sind(x) IN (-1,-0.5,0,0.5,1) AS sind_exact
452 FROM (VALUES (0), (30), (90), (150), (180),
453       (210), (270), (330), (360)) AS t(x);
454   x  | sind | sind_exact 
455 -----+------+------------
456    0 |    0 | t
457   30 |  0.5 | t
458   90 |    1 | t
459  150 |  0.5 | t
460  180 |    0 | t
461  210 | -0.5 | t
462  270 |   -1 | t
463  330 | -0.5 | t
464  360 |    0 | t
465 (9 rows)
466
467 SELECT x,
468        cosd(x),
469        cosd(x) IN (-1,-0.5,0,0.5,1) AS cosd_exact
470 FROM (VALUES (0), (60), (90), (120), (180),
471       (240), (270), (300), (360)) AS t(x);
472   x  | cosd | cosd_exact 
473 -----+------+------------
474    0 |    1 | t
475   60 |  0.5 | t
476   90 |    0 | t
477  120 | -0.5 | t
478  180 |   -1 | t
479  240 | -0.5 | t
480  270 |    0 | t
481  300 |  0.5 | t
482  360 |    1 | t
483 (9 rows)
484
485 SELECT x,
486        tand(x),
487        tand(x) IN ('-Infinity'::float8,-1,0,
488                    1,'Infinity'::float8) AS tand_exact,
489        cotd(x),
490        cotd(x) IN ('-Infinity'::float8,-1,0,
491                    1,'Infinity'::float8) AS cotd_exact
492 FROM (VALUES (0), (45), (90), (135), (180),
493       (225), (270), (315), (360)) AS t(x);
494   x  |   tand    | tand_exact |   cotd    | cotd_exact 
495 -----+-----------+------------+-----------+------------
496    0 |         0 | t          |  Infinity | t
497   45 |         1 | t          |         1 | t
498   90 |  Infinity | t          |         0 | t
499  135 |        -1 | t          |        -1 | t
500  180 |         0 | t          | -Infinity | t
501  225 |         1 | t          |         1 | t
502  270 | -Infinity | t          |         0 | t
503  315 |        -1 | t          |        -1 | t
504  360 |         0 | t          |  Infinity | t
505 (9 rows)
506
507 SELECT x,
508        asind(x),
509        asind(x) IN (-90,-30,0,30,90) AS asind_exact,
510        acosd(x),
511        acosd(x) IN (0,60,90,120,180) AS acosd_exact
512 FROM (VALUES (-1), (-0.5), (0), (0.5), (1)) AS t(x);
513   x   | asind | asind_exact | acosd | acosd_exact 
514 ------+-------+-------------+-------+-------------
515    -1 |   -90 | t           |   180 | t
516  -0.5 |   -30 | t           |   120 | t
517     0 |     0 | t           |    90 | t
518   0.5 |    30 | t           |    60 | t
519     1 |    90 | t           |     0 | t
520 (5 rows)
521
522 SELECT x,
523        atand(x),
524        atand(x) IN (-90,-45,0,45,90) AS atand_exact
525 FROM (VALUES ('-Infinity'::float8), (-1), (0), (1),
526       ('Infinity'::float8)) AS t(x);
527      x     | atand | atand_exact 
528 -----------+-------+-------------
529  -Infinity |   -90 | t
530         -1 |   -45 | t
531          0 |     0 | t
532          1 |    45 | t
533   Infinity |    90 | t
534 (5 rows)
535
536 SELECT x, y,
537        atan2d(y, x),
538        atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact
539 FROM (SELECT 10*cosd(a), 10*sind(a)
540       FROM generate_series(0, 360, 90) AS t(a)) AS t(x,y);
541   x  |  y  | atan2d | atan2d_exact 
542 -----+-----+--------+--------------
543   10 |   0 |      0 | t
544    0 |  10 |     90 | t
545  -10 |   0 |    180 | t
546    0 | -10 |    -90 | t
547   10 |   0 |      0 | t
548 (5 rows)
549
550 RESET extra_float_digits;