Skip to content

Commit f85a414

Browse files
authored
YQL-17615: fixed formatting of float4 in pgrun (#1339)
1 parent cc82728 commit f85a414

File tree

5 files changed

+91
-35
lines changed

5 files changed

+91
-35
lines changed

ydb/library/yql/tests/postgresql/cases/float4.out

-9
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,6 @@ SELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
229229
1.2345679e-20 | -1.2345678e-19
230230
(3 rows)
231231

232-
SELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
233-
WHERE f.f1 > '0.0';
234-
f1 | x
235-
---------------+---------------
236-
1004.3 | 994.3
237-
1.2345679e+20 | 1.2345679e+20
238-
1.2345679e-20 | -10
239-
(3 rows)
240-
241232
SELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
242233
WHERE f.f1 > '0.0';
243234
f1 | x

ydb/library/yql/tests/postgresql/cases/float4.sql

-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ SELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;
5454
SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3';
5555
SELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f
5656
WHERE f.f1 > '0.0';
57-
SELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f
58-
WHERE f.f1 > '0.0';
5957
SELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f
6058
WHERE f.f1 > '0.0';
6159
SELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f

ydb/library/yql/tests/postgresql/cases/float8.out

+71-17
Original file line numberDiff line numberDiff line change
@@ -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-
229219
SELECT 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
247230
SELECT 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
298291
SELECT 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
497501
SELECT 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+
503524
SELECT * FROM FLOAT8_TBL;
504525
f1
505526
----------------------
@@ -526,12 +547,45 @@ SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
526547
ERROR: cannot take logarithm of a negative number
527548
SELECT f.f1 / '0.0' from FLOAT8_TBL f;
528549
ERROR: 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+
529571
SELECT 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
536590
SELECT sinh(float8 'infinity');
537591
sinh

ydb/library/yql/tests/postgresql/cases/float8.sql

+18-5
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,9 @@ SELECT f.f1, f.f1 * '-10' AS x
5050
SELECT f.f1, f.f1 + '-10' AS x
5151
FROM FLOAT8_TBL f
5252
WHERE f.f1 > '0.0';
53-
SELECT f.f1, f.f1 / '-10' AS x
54-
FROM FLOAT8_TBL f
55-
WHERE f.f1 > '0.0';
5653
SELECT f.f1, f.f1 - '-10' AS x
5754
FROM FLOAT8_TBL f
5855
WHERE f.f1 > '0.0';
59-
SELECT f.f1 ^ '2.0' AS square_f1
60-
FROM FLOAT8_TBL f where f.f1 = '1004.3';
6156
-- absolute value
6257
SELECT f.f1, @f.f1 AS abs_f1
6358
FROM FLOAT8_TBL f;
@@ -72,6 +67,9 @@ SET extra_float_digits = 0;
7267
-- square root
7368
SELECT sqrt(float8 '64') AS eight;
7469
SELECT |/ float8 '64' AS eight;
70+
SELECT f.f1, |/f.f1 AS sqrt_f1
71+
FROM FLOAT8_TBL f
72+
WHERE f.f1 > '0.0';
7573
-- power
7674
SELECT power(float8 '144', float8 '0.5');
7775
SELECT power(float8 'NaN', float8 '0.5');
@@ -109,16 +107,31 @@ SELECT power(float8 '-inf', float8 '3');
109107
SELECT power(float8 '-inf', float8 '3.5');
110108
SELECT power(float8 '-inf', float8 'inf');
111109
SELECT power(float8 '-inf', float8 '-inf');
110+
-- take exp of ln(f.f1)
111+
SELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1
112+
FROM FLOAT8_TBL f
113+
WHERE f.f1 > '0.0';
112114
-- check edge cases for exp
113115
SELECT exp('inf'::float8), exp('-inf'::float8), exp('nan'::float8);
116+
-- cube root
117+
SELECT ||/ float8 '27' AS three;
118+
SELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
114119
SELECT * FROM FLOAT8_TBL;
115120
SELECT f.f1 * '1e200' from FLOAT8_TBL f;
116121
SELECT f.f1 ^ '1e200' from FLOAT8_TBL f;
117122
SELECT 0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5;
118123
SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;
119124
SELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;
120125
SELECT f.f1 / '0.0' from FLOAT8_TBL f;
126+
-- hyperbolic functions
127+
-- we run these with extra_float_digits = 0 too, since different platforms
128+
-- tend to produce results that vary in the last place.
129+
SELECT sinh(float8 '1');
130+
SELECT cosh(float8 '1');
131+
SELECT tanh(float8 '1');
121132
SELECT asinh(float8 '1');
133+
SELECT acosh(float8 '2');
134+
SELECT atanh(float8 '0.5');
122135
-- test Inf/NaN cases for hyperbolic functions
123136
SELECT sinh(float8 'infinity');
124137
SELECT sinh(float8 '-infinity');

ydb/library/yql/tools/pgrun/pgrun.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -762,13 +762,13 @@ const TString FormatFloat(const TString& value, std::function<TString(const TStr
762762
inline const TString FormatFloat4(const TString& value)
763763
{
764764
return FormatFloat(value,
765-
[] (const TString& val) { return TString(fmt::format("{0}", std::stof(val))); });
765+
[] (const TString& val) { return TString(fmt::format("{:.8g}", std::stof(val))); });
766766
}
767767

768768
inline const TString FormatFloat8(const TString& value)
769769
{
770770
return FormatFloat(value,
771-
[] (const TString& val) { return TString(fmt::format("{0}", std::stod(val))); });
771+
[] (const TString& val) { return TString(fmt::format("{:.15g}", std::stod(val))); });
772772
}
773773

774774
inline const TString FormatTransparent(const TString& value)

0 commit comments

Comments
 (0)