mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-14 16:46:54 +08:00
Improved check [skip ci]
This commit is contained in:
19
src/half.c
19
src/half.c
@@ -294,6 +294,19 @@ HalfIsInf(half num)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if half is zero
|
||||||
|
*/
|
||||||
|
static inline bool
|
||||||
|
HalfIsZero(half num)
|
||||||
|
{
|
||||||
|
#ifdef FLT16_SUPPORT
|
||||||
|
return num == 0;
|
||||||
|
#else
|
||||||
|
return (num << 1) == 0x0000;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert a float4 to a half
|
* Convert a float4 to a half
|
||||||
*/
|
*/
|
||||||
@@ -304,8 +317,7 @@ Float4ToHalf(float num)
|
|||||||
|
|
||||||
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
||||||
float_overflow_error();
|
float_overflow_error();
|
||||||
/* TODO Perform check without HalfToFloat4 */
|
if (unlikely(HalfIsZero(result)) && num != 0.0)
|
||||||
if (unlikely(HalfToFloat4(result) == 0.0f) && num != 0.0)
|
|
||||||
float_underflow_error();
|
float_underflow_error();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -322,8 +334,7 @@ Float8ToHalf(double num)
|
|||||||
|
|
||||||
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
||||||
float_overflow_error();
|
float_overflow_error();
|
||||||
/* TODO Perform check without HalfToFloat4 */
|
if (unlikely(HalfIsZero(result)) && num != 0.0)
|
||||||
if (unlikely(HalfToFloat4(result) == 0.0f) && num != 0.0)
|
|
||||||
float_underflow_error();
|
float_underflow_error();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ SELECT 'Infinity'::real::half;
|
|||||||
Infinity
|
Infinity
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
SELECT '1e-38'::real::half;
|
||||||
|
ERROR: value out of range: underflow
|
||||||
SELECT '1.5'::half::real;
|
SELECT '1.5'::half::real;
|
||||||
float4
|
float4
|
||||||
--------
|
--------
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ SELECT '{1,2,3}'::half[]::real[];
|
|||||||
SELECT '65505'::integer::half;
|
SELECT '65505'::integer::half;
|
||||||
SELECT 'NaN'::real::half;
|
SELECT 'NaN'::real::half;
|
||||||
SELECT 'Infinity'::real::half;
|
SELECT 'Infinity'::real::half;
|
||||||
|
SELECT '1e-38'::real::half;
|
||||||
|
|
||||||
SELECT '1.5'::half::real;
|
SELECT '1.5'::half::real;
|
||||||
SELECT '1.5'::real::half;
|
SELECT '1.5'::real::half;
|
||||||
|
|||||||
Reference in New Issue
Block a user