@@ -216,16 +216,6 @@ SELECT f.f1, f.f1 + '-10' AS x
216216 1.2345678901234e-200 | -10
217217(3 rows)
218218
219- SELECT f.f1, f.f1 / '-10' AS x
220- FROM FLOAT8_TBL f
221- WHERE f.f1 > '0.0';
222- f1 | x
223- ----------------------+-----------------------
224- 1004.3 | -100.42999999999999
225- 1.2345678901234e+200 | -1.2345678901234e+199
226- 1.2345678901234e-200 | -1.2345678901234e-201
227- (3 rows)
228-
229219SELECT f.f1, f.f1 - '-10' AS x
230220 FROM FLOAT8_TBL f
231221 WHERE f.f1 > '0.0';
@@ -236,13 +226,6 @@ SELECT f.f1, f.f1 - '-10' AS x
236226 1.2345678901234e-200 | 10
237227(3 rows)
238228
239- SELECT f.f1 ^ '2.0' AS square_f1
240- FROM FLOAT8_TBL f where f.f1 = '1004.3';
241- square_f1
242- --------------------
243- 1008618.4899999999
244- (1 row)
245-
246229-- absolute value
247230SELECT f.f1, @f.f1 AS abs_f1
248231 FROM FLOAT8_TBL f;
@@ -294,6 +277,16 @@ SELECT |/ float8 '64' AS eight;
294277 8
295278(1 row)
296279
280+ SELECT f.f1, |/f.f1 AS sqrt_f1
281+ FROM FLOAT8_TBL f
282+ WHERE f.f1 > '0.0';
283+ f1 | sqrt_f1
284+ ----------------------+-----------------------
285+ 1004.3 | 31.6906926399535
286+ 1.2345678901234e+200 | 1.11111110611109e+100
287+ 1.2345678901234e-200 | 1.11111110611109e-100
288+ (3 rows)
289+
297290-- power
298291SELECT power(float8 '144', float8 '0.5');
299292 power
@@ -493,13 +486,41 @@ SELECT power(float8 '-inf', float8 '-inf');
493486 0
494487(1 row)
495488
489+ -- take exp of ln(f.f1)
490+ SELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1
491+ FROM FLOAT8_TBL f
492+ WHERE f.f1 > '0.0';
493+ f1 | exp_ln_f1
494+ ----------------------+-----------------------
495+ 1004.3 | 1004.3
496+ 1.2345678901234e+200 | 1.23456789012338e+200
497+ 1.2345678901234e-200 | 1.23456789012339e-200
498+ (3 rows)
499+
496500-- check edge cases for exp
497501SELECT exp('inf'::float8), exp('-inf'::float8), exp('nan'::float8);
498502 exp | exp | exp
499503----------+-----+-----
500504 Infinity | 0 | NaN
501505(1 row)
502506
507+ -- cube root
508+ SELECT ||/ float8 '27' AS three;
509+ three
510+ -------
511+ 3
512+ (1 row)
513+
514+ SELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
515+ f1 | cbrt_f1
516+ ----------------------+----------------------
517+ 0 | 0
518+ 1004.3 | 10.014312837827
519+ -34.84 | -3.26607421344208
520+ 1.2345678901234e+200 | 4.97933859234765e+66
521+ 1.2345678901234e-200 | 2.3112042409018e-67
522+ (5 rows)
523+
503524SELECT * FROM FLOAT8_TBL;
504525 f1
505526----------------------
@@ -526,12 +547,45 @@ SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
526547ERROR: cannot take logarithm of a negative number
527548SELECT f.f1 / '0.0' from FLOAT8_TBL f;
528549ERROR: division by zero
550+ -- hyperbolic functions
551+ -- we run these with extra_float_digits = 0 too, since different platforms
552+ -- tend to produce results that vary in the last place.
553+ SELECT sinh(float8 '1');
554+ sinh
555+ -----------------
556+ 1.1752011936438
557+ (1 row)
558+
559+ SELECT cosh(float8 '1');
560+ cosh
561+ ------------------
562+ 1.54308063481524
563+ (1 row)
564+
565+ SELECT tanh(float8 '1');
566+ tanh
567+ -------------------
568+ 0.761594155955765
569+ (1 row)
570+
529571SELECT asinh(float8 '1');
530572 asinh
531573-------------------
532574 0.881373587019543
533575(1 row)
534576
577+ SELECT acosh(float8 '2');
578+ acosh
579+ ------------------
580+ 1.31695789692482
581+ (1 row)
582+
583+ SELECT atanh(float8 '0.5');
584+ atanh
585+ -------------------
586+ 0.549306144334055
587+ (1 row)
588+
535589-- test Inf/NaN cases for hyperbolic functions
536590SELECT sinh(float8 'infinity');
537591 sinh
0 commit comments