Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4fb6aeb

Browse filesBrowse files
committed
Make floating-point "NaN / 0" return NaN instead of raising an error.
This is more consistent with the IEEE 754 spec and our treatment of NaNs elsewhere; in particular, the case has always acted that way in "numeric" arithmetic. Noted by Dean Rasheed. Discussion: https://postgr.es/m/3421746.1594927785@sss.pgh.pa.us
1 parent 6ca7cd8 commit 4fb6aeb
Copy full SHA for 4fb6aeb

File tree

Expand file treeCollapse file tree

6 files changed

+22
-2
lines changed
Filter options
Expand file treeCollapse file tree

6 files changed

+22
-2
lines changed

‎src/include/utils/float.h

Copy file name to clipboardExpand all lines: src/include/utils/float.h
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ float4_div(const float4 val1, const float4 val2)
222222
{
223223
float4 result;
224224

225-
if (unlikely(val2 == 0.0f))
225+
if (unlikely(val2 == 0.0f) && !isnan(val1))
226226
float_zero_divide_error();
227227
result = val1 / val2;
228228
if (unlikely(isinf(result)) && !isinf(val1) && !isinf(val2))
@@ -238,7 +238,7 @@ float8_div(const float8 val1, const float8 val2)
238238
{
239239
float8 result;
240240

241-
if (unlikely(val2 == 0.0))
241+
if (unlikely(val2 == 0.0) && !isnan(val1))
242242
float_zero_divide_error();
243243
result = val1 / val2;
244244
if (unlikely(isinf(result)) && !isinf(val1) && !isinf(val2))

‎src/test/regress/expected/float4-misrounded-input.out

Copy file name to clipboardExpand all lines: src/test/regress/expected/float4-misrounded-input.out
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ SELECT 'nan'::float4 / 'nan'::float4;
143143
NaN
144144
(1 row)
145145

146+
SELECT 'nan'::float4 / '0'::float4;
147+
?column?
148+
----------
149+
NaN
150+
(1 row)
151+
146152
SELECT 'nan'::numeric::float4;
147153
float4
148154
--------

‎src/test/regress/expected/float4.out

Copy file name to clipboardExpand all lines: src/test/regress/expected/float4.out
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ SELECT 'nan'::float4 / 'nan'::float4;
143143
NaN
144144
(1 row)
145145

146+
SELECT 'nan'::float4 / '0'::float4;
147+
?column?
148+
----------
149+
NaN
150+
(1 row)
151+
146152
SELECT 'nan'::numeric::float4;
147153
float4
148154
--------

‎src/test/regress/expected/float8.out

Copy file name to clipboardExpand all lines: src/test/regress/expected/float8.out
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ SELECT 'nan'::float8 / 'nan'::float8;
126126
NaN
127127
(1 row)
128128

129+
SELECT 'nan'::float8 / '0'::float8;
130+
?column?
131+
----------
132+
NaN
133+
(1 row)
134+
129135
SELECT 'nan'::numeric::float8;
130136
float8
131137
--------

‎src/test/regress/sql/float4.sql

Copy file name to clipboardExpand all lines: src/test/regress/sql/float4.sql
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ SELECT ' INFINITY x'::float4;
5050
SELECT 'Infinity'::float4 + 100.0;
5151
SELECT 'Infinity'::float4 / 'Infinity'::float4;
5252
SELECT 'nan'::float4 / 'nan'::float4;
53+
SELECT 'nan'::float4 / '0'::float4;
5354
SELECT 'nan'::numeric::float4;
5455

5556
SELECT '' AS five, * FROM FLOAT4_TBL;

‎src/test/regress/sql/float8.sql

Copy file name to clipboardExpand all lines: src/test/regress/sql/float8.sql
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ SELECT ' INFINITY x'::float8;
4343
SELECT 'Infinity'::float8 + 100.0;
4444
SELECT 'Infinity'::float8 / 'Infinity'::float8;
4545
SELECT 'nan'::float8 / 'nan'::float8;
46+
SELECT 'nan'::float8 / '0'::float8;
4647
SELECT 'nan'::numeric::float8;
4748

4849
SELECT '' AS five, * FROM FLOAT8_TBL;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.