Hello,

Le 28/06/2018 à 17:41, Stéphane Mottelet a écrit :
Hello all,

A fix proposal is under review @ https://codereview.scilab.org/#/c/20204/2, in order to consider the actual behavior of clean() when the argument has some infinite values:

In Scilab 6.0.1:


--> clean([%inf 1])
 ans  =

   0.   0.

By a argument of continuity, since

--> clean([1.79e308 1])
 ans  =

   1.79D+308   0.

the fixed behavior would be

--> clean([%inf 1])
 ans  =

   Inf   0.

Please give your opinion if you feel concerned.


IMO, setting to zero all finite values of an array as soon as one of them is %inf is abusive and counter-productive.
Let
--> A = 10.^grand(4,4,"unf",-10,5); A(2,2) = %inf;
 A  =
   4.3699094   0.0000014   0.67061     6.095D-09
   6503.1214   Inf         4.5767598   0.0006926
   20.907407   1.5687011   2.749D-08   0.0029886
   129.70759   1.102D-10   0.4564722   40.621591

The proposed implementation would lead to

--> clean(A)    //  A(abs(A)~=%inf & A==A)=0
 ans  =
   0.   0.    0.   0.
   0.   Inf   0.   0.
   0.   0.    0.   0.
   0.   0.    0.   0.

With that, no more processing or linear algebra can be done, just getting exclusively some zeros, %inf, and Nan. The same can be done with A(abs(A)~=%inf) = 0. This is a poor and stopping result.

Instead, cleaning values *with respect to the max |finite| one* will yield

--> clean(A)     // B = A; A(abs(A)<max(A(abs(A)<%inf))*1e-10)=0
 A  =
   4.3699094   0.0000014   0.67061     0.
   6503.1214   Inf         4.5767598   0.0006926
   20.907407   1.5687011   0.          0.0029886
   129.70759   0.          0.4564722   40.621591

This result is a way richer. It still allows to work with it.

By the way, there is no /continuity/ from 1.79D+308 to %inf
An array may have all its |values| around and below the max 1.79D+308 by some small factors, then arithmetic can still be possible with them, and %inf will still be a special value with a special processing.

This is why i do not agree with the proposed clean() update.

Best regards
Samuel


_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to