mirror of
https://github.com/pgvector/pgvector.git
synced 2026-06-06 05:51:21 +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
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
@@ -304,8 +317,7 @@ Float4ToHalf(float num)
|
||||
|
||||
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
||||
float_overflow_error();
|
||||
/* TODO Perform check without HalfToFloat4 */
|
||||
if (unlikely(HalfToFloat4(result) == 0.0f) && num != 0.0)
|
||||
if (unlikely(HalfIsZero(result)) && num != 0.0)
|
||||
float_underflow_error();
|
||||
|
||||
return result;
|
||||
@@ -322,8 +334,7 @@ Float8ToHalf(double num)
|
||||
|
||||
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
||||
float_overflow_error();
|
||||
/* TODO Perform check without HalfToFloat4 */
|
||||
if (unlikely(HalfToFloat4(result) == 0.0f) && num != 0.0)
|
||||
if (unlikely(HalfIsZero(result)) && num != 0.0)
|
||||
float_underflow_error();
|
||||
|
||||
return result;
|
||||
|
||||
@@ -82,6 +82,8 @@ SELECT 'Infinity'::real::half;
|
||||
Infinity
|
||||
(1 row)
|
||||
|
||||
SELECT '1e-38'::real::half;
|
||||
ERROR: value out of range: underflow
|
||||
SELECT '1.5'::half::real;
|
||||
float4
|
||||
--------
|
||||
|
||||
@@ -17,6 +17,7 @@ SELECT '{1,2,3}'::half[]::real[];
|
||||
SELECT '65505'::integer::half;
|
||||
SELECT 'NaN'::real::half;
|
||||
SELECT 'Infinity'::real::half;
|
||||
SELECT '1e-38'::real::half;
|
||||
|
||||
SELECT '1.5'::half::real;
|
||||
SELECT '1.5'::real::half;
|
||||
|
||||
Reference in New Issue
Block a user