mirror of
https://github.com/pgvector/pgvector.git
synced 2026-06-30 17:51:18 +08:00
Added HalfIsInf [skip ci]
This commit is contained in:
21
src/half.c
21
src/half.c
@@ -281,6 +281,19 @@ Float4ToHalfUnchecked(float num)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if half is infinite
|
||||
*/
|
||||
static inline bool
|
||||
HalfIsInf(half num)
|
||||
{
|
||||
#ifdef FLT16_SUPPORT
|
||||
return isinf(num);
|
||||
#else
|
||||
return (num << 1) == 0xF800;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a float4 to a half
|
||||
*/
|
||||
@@ -289,9 +302,9 @@ Float4ToHalf(float num)
|
||||
{
|
||||
half result = Float4ToHalfUnchecked(num);
|
||||
|
||||
/* TODO Perform checks without HalfToFloat4 */
|
||||
if (unlikely(isinf(HalfToFloat4(result))) && !isinf(num))
|
||||
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
||||
float_overflow_error();
|
||||
/* TODO Perform check without HalfToFloat4 */
|
||||
if (unlikely(HalfToFloat4(result) == 0.0f) && num != 0.0)
|
||||
float_underflow_error();
|
||||
|
||||
@@ -307,9 +320,9 @@ Float8ToHalf(double num)
|
||||
/* TODO Convert directly for greater accuracy */
|
||||
half result = Float4ToHalfUnchecked((float) num);
|
||||
|
||||
/* TODO Perform checks without HalfToFloat4 */
|
||||
if (unlikely(isinf(HalfToFloat4(result))) && !isinf(num))
|
||||
if (unlikely(HalfIsInf(result)) && !isinf(num))
|
||||
float_overflow_error();
|
||||
/* TODO Perform check without HalfToFloat4 */
|
||||
if (unlikely(HalfToFloat4(result) == 0.0f) && num != 0.0)
|
||||
float_underflow_error();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user