if (unlikely(val2 == 0.0f) && !isnan(val1))
float_zero_divide_error();
result = val1 / val2;
- if (unlikely(isinf(result)) && !isinf(val1) && !isinf(val2))
+ if (unlikely(isinf(result)) && !isinf(val1))
float_overflow_error();
- if (unlikely(result == 0.0f) && val1 != 0.0f)
+ if (unlikely(result == 0.0f) && val1 != 0.0f && !isinf(val2))
float_underflow_error();
return result;
if (unlikely(val2 == 0.0) && !isnan(val1))
float_zero_divide_error();
result = val1 / val2;
- if (unlikely(isinf(result)) && !isinf(val1) && !isinf(val2))
+ if (unlikely(isinf(result)) && !isinf(val1))
float_overflow_error();
- if (unlikely(result == 0.0) && val1 != 0.0)
+ if (unlikely(result == 0.0) && val1 != 0.0 && !isinf(val2))
float_underflow_error();
return result;
NaN
(1 row)
+SELECT '42'::float4 / 'Infinity'::float4;
+ ?column?
+----------
+ 0
+(1 row)
+
SELECT 'nan'::float4 / 'nan'::float4;
?column?
----------
NaN
(1 row)
+SELECT '42'::float4 / 'Infinity'::float4;
+ ?column?
+----------
+ 0
+(1 row)
+
SELECT 'nan'::float4 / 'nan'::float4;
?column?
----------
NaN
(1 row)
+SELECT '42'::float8 / 'Infinity'::float8;
+ ?column?
+----------
+ 0
+(1 row)
+
SELECT 'nan'::float8 / 'nan'::float8;
?column?
----------
SELECT 'Infinity'::float4 + 100.0;
SELECT 'Infinity'::float4 / 'Infinity'::float4;
+SELECT '42'::float4 / 'Infinity'::float4;
SELECT 'nan'::float4 / 'nan'::float4;
SELECT 'nan'::float4 / '0'::float4;
SELECT 'nan'::numeric::float4;
SELECT 'Infinity'::float8 + 100.0;
SELECT 'Infinity'::float8 / 'Infinity'::float8;
+SELECT '42'::float8 / 'Infinity'::float8;
SELECT 'nan'::float8 / 'nan'::float8;
SELECT 'nan'::float8 / '0'::float8;
SELECT 'nan'::numeric::float8;