[Scilab-Dev] Serious bug in find()?

Serge Steer Serge.Steer at inria.fr
Thu Nov 18 10:21:07 CET 2010


Le 17/11/2010 20:24, Dean S. Messing a écrit :
> Before I submit this to Bugzilla I'd like your expert opinions: does the
> following tickle a longstanding bug in find()?
>
>   
I have tested your script with Scilab-4.1.2 and Scilab-5.3.0-beta-4
under Linux (SuSe 11.2)  in both case no problem detected
sum gives a finite result and  find(isnan(v)) returns an empty matrix.

Please enter a bug report, but  give your OS configuration....

Serge Steer

> I have is an array of 19,200,000 reals.  There are seven sub-vectors
> w/in the array that each contain 2000 Nan's (due to hardware failure in
> a device).
>
> When I use find() together with isnan() to find the beginning of each
> sub-vector, some indices that find() returns are off by 1.  Following is
> a short script to demonstrate.  This bug is in both scilab-branch-5.3
> and scilab-4.1.1.  I've verified that the vector isnan() returns is
> correct.
>
> How to demonstrate the bug:
>
> Fire up Scilab and run the following script:
>
> // Generate a vector, v, containing 7 subvectors == %nan*ones(2000,1)
> // Each subvector begins at a multiple of 2000 (plus 1).
> stacksize(100000000)
> clear v
> v=rand(19200000,1);
> i=[10336001,..
>    13716001,..
>    15400001,..
>    15402001,..
>    18278001,..
>    18762001,..
>    19198001];
> for j=i
>   v(j:j+1999) = %nan*ones(2000,1);
> end
>
>
> // w  conforms to v and contains %t everywhere v == %nan.
> w=isnan(v);
>
> // w1 are the indices in v at whose location v == %nan
> w1=find(w); 
>
> // zero out all the Nan's in v.
> v(w1) = 0;  
>
> // This shd. be a real.  But it's Nan!
> // So v still contains at least one Nan.
> sum(v)
>
> // Step though w1 to and print the seven starting indices of each
> // subvector of Nan's in v.
> w1(1 : 2000 : 7*2000)
>                       
>
>
>
> The output of the last two insructions is:
>
> -->sum(v)
>  ans  =
>  
>     Nan 
>  
> -->
>  
> -->// Step though w1 to and print the seven starting indices of each
>  
> -->// subvector of Nan's in v.
>  
> -->w1(1 : 2000 : 7*2000)
>  ans  =
>  
>     10336001.    13716001.    15400001.    15402001.    18278000.    18762000.    19198000.  
>
> The last three indices are off by 1!
>
> Indeed, for example, w(18278000) == %f  and  w(18278001) == %t.
> So find() has returned the wrong indices!
>
> Dean
>
>   




More information about the dev mailing list