BUG DESCRIPTION:
----------------
gsort(c,"g","i") sometimes badly sorts complex numbers with NaN moduli.
As shown below, the situation has somewhat been improved from Scilab 5.5 to 6.1.0, but it's still not correct.
Since NaN are not sortable, their initial order should be preserved, as if they were all equal to each others.
BTW, this special point would deserve being documented.
m = "complex([1,0,0,0,2,1;%nan,0,0,%nan,0,0;0,2,%nan,%nan,0,1;%nan,2,0,1,2,2;0,0,0,0,0,0;%nan,0,3,0,0,1],"+..
" [2,2,1,0,2,%nan;0,0,0,0,0,0;1,0,0,3,0,%nan;1,2,0,0,0,1;0,0,%nan,0,0,%nan;1,0,%nan,%nan,2,0])";
--> m = evstr(m)
m =
1. + 2.i 0. + 2.i 0. + i 0. + 0.i 2. + 2.i 1. + Nani
Nan + 0.i 0. + 0.i 0. + 0.i Nan + 0.i 0. + 0.i 0. + 0.i
0. + i 2. + 0.i Nan + 0.i Nan + 3.i 0. + 0.i 1. + Nani
Nan + i 2. + 2.i 0. + 0.i 1. + 0.i 2. + 0.i 2. + i
0. + 0.i 0. + 0.i 0. + Nani 0. + 0.i 0. + 0.i 0. + Nani
Nan + i 0. + 0.i 3. + Nani 0. + Nani 0. + 2.i 1. + 0.i
Then:
Scilab 5.5.2:
------------
-->s = gsort(m, "g", "i")
s =
0 0 i 2. Nani 3. + Nani
0 0 i 2.i Nan + 3.i Nani
0 0 1. 1. + 2.i Nan Nani
0 0 1. 2. + i Nan + i 1. + Nani
0 0 2.i 2. + 2.i Nan Nan
0 0 2. 2. + 2.i Nan + i 1. + Nani
=> Well gathered at the end, but none in their initial order.
Scilab 6.0.0 - 6.0.2
--------------------
--> s = gsort(m, "g", "i")
s =
Nan Nan 0. 1. 2.i 3. + Nani
0. 0. 0. Nan + i 1. + 2.i Nani
0. 0. 0. Nan + i 2. + i Nani
0. Nan i 2.i 2. + 2.i 1. + Nani
0. 0. i 2. 2. + 2.i 1. + Nani
0. 0. 1. 2. Nan + 3.i Nani
Here, Nan are even not gathered in the tail...
Scilab 6.1.0
------------
--> s = gsort(m, "g", "i")
s =
0. + 0.i 0. + 0.i 0. + i 2. + 0.i Nan + 0.i *0. + Nani
0. + 0.i 0. + 0.i 0. + i 0. + 2.i Nan + i *0. + Nani
0. + 0.i 0. + 0.i 1. + 0.i 1. + 2.i Nan + i *Nan + 0.i
0. + 0.i 0. + 0.i 1. + 0.i 2. + i Nan + 0.i 1. + Nani
0. + 0.i 0. + 0.i 0. + 2.i 2. + 2.i *Nan + 3.i 1. + Nani
0. + 0.i 0. + 0.i 2. + 0.i 2. + 2.i 3. + Nani 0. + Nani
We get them back all at the end, but not in their initial order.
Wrong positions are starred. Returning indices shows it: For the 2
last columns, indices are not completely in increasing order:
--> [s, k] = gsort(m, "g", "i");
--> k
k =
5. 19. 3. 28. 2. 17.
8. 23. 13. 30. 4. 24.
11. 26. 22. 1. 6. 15.
12. 27. 36. 34. 20. 31.
14. 29. 7. 10. 21. 33.
16. 32. 9. 25. 18. 35.
ERROR LOG:
----------
None. Wrong order
HOW TO REPRODUCE THE BUG:
-------------------------
m = "complex([1,0,0,0,2,1;%nan,0,0,%nan,0,0;0,2,%nan,%nan,0,1;%nan,2,0,1,2,2;0,0,0,0,0,0;%nan,0,3,0,0,1],"+..
" [2,2,1,0,2,%nan;0,0,0,0,0,0;1,0,0,3,0,%nan;1,2,0,0,0,1;0,0,%nan,0,0,%nan;1,0,%nan,%nan,2,0])";
m = evstr(m);
[s, k] = gsort(m, "g","i");
and(gsort(k(:,5:6),"g","i")==k(:,5:6))