[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