Fixed infinite values with vector addition and subtraction

This commit is contained in:
Andrew Kane
2023-05-31 13:54:19 -07:00
parent dee2c4feb1
commit 0ef0467a0f
4 changed files with 15 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
## 0.4.3 (unreleased)
- Fixed infinite values with vector addition and subtraction
- Fixed compilation error when `float8` is pass by reference
- Fixed compilation error on PowerPC
- Fixed segmentation fault with index creation on i386

View File

@@ -656,6 +656,10 @@ vector_add(PG_FUNCTION_ARGS)
for (int i = 0, imax = a->dim; i < imax; i++)
rx[i] = ax[i] + bx[i];
for (int i = 0, imax = a->dim; i < imax; i++)
if (isinf(rx[i]))
float_overflow_error();
PG_RETURN_POINTER(result);
}
@@ -682,6 +686,10 @@ vector_sub(PG_FUNCTION_ARGS)
for (int i = 0, imax = a->dim; i < imax; i++)
rx[i] = ax[i] - bx[i];
for (int i = 0, imax = a->dim; i < imax; i++)
if (isinf(rx[i]))
float_overflow_error();
PG_RETURN_POINTER(result);
}

View File

@@ -4,12 +4,16 @@ SELECT '[1,2,3]'::vector + '[4,5,6]';
[5,7,9]
(1 row)
SELECT '[3e38]'::vector + '[3e38]';
ERROR: value out of range: overflow
SELECT '[1,2,3]'::vector - '[4,5,6]';
?column?
------------
[-3,-3,-3]
(1 row)
SELECT '[-3e38]'::vector - '[3e38]';
ERROR: value out of range: overflow
SELECT vector_dims('[1,2,3]');
vector_dims
-------------

View File

@@ -1,5 +1,7 @@
SELECT '[1,2,3]'::vector + '[4,5,6]';
SELECT '[3e38]'::vector + '[3e38]';
SELECT '[1,2,3]'::vector - '[4,5,6]';
SELECT '[-3e38]'::vector - '[3e38]';
SELECT vector_dims('[1,2,3]');