This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 4552d77166 Fix a code of `TransformSeparator` where the accurracy of 
matrix elements could be lost.
4552d77166 is described below

commit 4552d771666f636b20e77cc93181eaee326a77bb
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Mon Jun 30 10:57:13 2025 +0200

    Fix a code of `TransformSeparator` where the accurracy of matrix elements 
could be lost.
---
 .../referencing/operation/transform/TransformSeparator.java    | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
index 1ff10dd391..d06ce77b27 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
@@ -613,13 +613,13 @@ public class TransformSeparator {
          * target dimensions that depend only on specified source dimensions. 
If a target dimension depends on
          * at least one discarded source dimension, then that output dimension 
will be discarded as well.
          */
-        final Matrix matrix = MathTransforms.getMatrix(step);
+        final MatrixSIS matrix = 
MatrixSIS.castOrCopy(MathTransforms.getMatrix(step));
         if (matrix != null) {
             targetDimensions = null;
             int startOfRow = 0;                         // Index of next row 
to be stored in the `elements` array.
             boolean isLastRowAccepted = false;          // To be set to `true` 
if we complete successfully up to last row.
             final int numFilteredColumns = (dimensions.length + 1);
-            double[] elements = new double[(numTgt + 1) * numFilteredColumns];
+            Number[] elements = new Number[(numTgt + 1) * numFilteredColumns];
 reduce:     for (int j=0; j <= numTgt; j++) {
                 /*
                  * For each target dimension (i.e. a matrix row), find the 
matrix elements (excluding translation
@@ -628,10 +628,10 @@ reduce:     for (int j=0; j <= numTgt; j++) {
                  */
                 int filteredColumn = 0;
                 for (int i=0; i<numSrc; i++) {
-                    final double element = matrix.getElement(j,i);
+                    final Number element = matrix.getNumber(j,i);
                     if (filteredColumn < dimensions.length && 
dimensions[filteredColumn] == i) {
                         elements[startOfRow + filteredColumn++] = element;
-                    } else if (element != 0) {
+                    } else if (element.doubleValue() != 0) {
                         /*
                          * Output dimension `j` depends on one of discarded 
input dimension `i`.
                          * The whole row will be discarded.
@@ -644,7 +644,7 @@ reduce:     for (int j=0; j <= numTgt; j++) {
                  * in the array of source dimensions to keep. The matrix 
coefficients for that row are copied in the
                  * `elements` array.
                  */
-                elements[startOfRow + filteredColumn++] = matrix.getElement(j, 
numSrc);  // Copy the translation term.
+                elements[startOfRow + filteredColumn++] = matrix.getNumber(j, 
numSrc);   // Copy the translation term.
                 assert filteredColumn == numFilteredColumns : filteredColumn;  
          // We should have used all values in the `dimensions` array.
                 startOfRow += numFilteredColumns;
                 /*

Reply via email to