1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-19 17:02:53 +03:00

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
This commit is contained in:
Tom Lane
2020-07-20 19:44:41 -04:00
parent 6ca7cd89a2
commit 4fb6aeb4f6
6 changed files with 22 additions and 2 deletions

View File

@@ -222,7 +222,7 @@ float4_div(const float4 val1, const float4 val2)
{
float4 result;
if (unlikely(val2 == 0.0f))
if (unlikely(val2 == 0.0f) && !isnan(val1))
float_zero_divide_error();
result = val1 / val2;
if (unlikely(isinf(result)) && !isinf(val1) && !isinf(val2))
@@ -238,7 +238,7 @@ float8_div(const float8 val1, const float8 val2)
{
float8 result;
if (unlikely(val2 == 0.0))
if (unlikely(val2 == 0.0) && !isnan(val1))
float_zero_divide_error();
result = val1 / val2;
if (unlikely(isinf(result)) && !isinf(val1) && !isinf(val2))