[scilab-Users] min/max with NaN values

Frederic Jourdin frederic.jourdin at shom.fr
Thu Nov 25 10:47:09 CET 2010


Michaël Baudin a écrit :
> Noticed the small line at the end of the Matlab/min: "The min function 
> ignores NaNs.". This is not written in the help page Scilab/min, but I 
> guess that this is also true.
>
> Now, Matlab is more consistent :
>
> >> min([1 nan])
> ans =
>      1
> >> min(1,nan)
> ans =
>      1
>
> while Scilab is weird :
>
> Scilab:
>
> -->min([1 %nan])
>  ans  =
>     1. 
> -->min(1,%nan)
>  ans  =
>     Nan
>
> I think that you have found a 2 more bugs (that is, added with the bug 
> #7608), i.e. :
> 1. nans are ignored by Scilab inside a matrix, but not across the 
> input arguments,
> 2. this is not explicitely written in the help page.
> I guess that the particular processing of Nans in the loop over the 
> arguments has just been forgotten.
>
> Would you mind to submit these bug report please ?

OK I am gonna report 1 bug regarding "NaN argument propagates in min/max".
I haven't read the convention you cited whether NaN should propagate or not
when it is an argument, instead inside of a matrix.
At least if it is to be the case it should be explicitely written in the 
help page with
some examples.
Fred

>
> Best regards,
>
> Michaël Baudin
>
> Le 24/11/2010 11:54, Michaël Baudin a écrit :
>> Ahah...
>>
>> In Scilab:
>>
>> -->min([1 2 3 %nan])
>>  ans  =
>>     1.
>> -->min(1,2,3,%nan)
>>  ans  =
>>     Nan
>>
>> This is fun...
>>
>> In Matlab:
>>
>> >> min([1 2 3 nan])
>> ans =
>>      1
>> >> min(1,2,3,nan)
>> ??? Error using ==> min
>> Too many input arguments.
>>
>> So Matlab does not support the y=min(x1,x2,x3) calling sequence, but 
>> Scilab do. On the other hand, Scilab results are weird with nans, at 
>> least.
>>
>> Regards,
>>
>> Michaël
>>
>> Le 24/11/2010 11:47, Mathieu Dubois a écrit :
>>> On 11/24/2010 11:40 AM, Michaël Baudin wrote:
>>>> Hi,
>>>>
>>>> The expected result is actually the matrix of Nans. If you had 
>>>> found another result, that would have been a bug. Even more, we 
>>>> have similar automatic checks that this is so - see the following 
>>>> unit test :
>>>>
>>>> http://gitweb.scilab.org/?p=scilab.git;a=blob;f=scilab/modules/elementary_functions/tests/unit_tests/IEEEcompatibility.tst;h=778fc00d4833f54fce6324ac917bac725d6f9e19;hb=HEAD 
>>>>
>>>>
>>>> Notice that this test is mainly for +,-,*,/,sqrt, the operations 
>>>> which are specified by the IEEE754 standard. With respect to Nan, 
>>>> these tests says that "Nan on input, then Nan on output". In the 
>>>> IEEE754 standard, the authors use the term "Nan propagation". More 
>>>> informations on this topic are given by "Handbook of Floating Point 
>>>> Arithmetic", by Muller et al.. See the sections "2.3 - Exceptions" 
>>>> and "3.1.5 Exceptions specified by IEEE754-1985".
>>> That sounds like a sane convention but then, just out of curiosity, 
>>> how do you explain that min([1 2 3 %nan])  returns 1?
>>>>
>>>> If you want to perform the computation without the nans, you may 
>>>> combine the "find" and "isnan" functions. For example, the statement:
>>>>
>>>> k = find(isnan(a))
>>>>
>>>> you get the indices where a is a nan. Now, the statement:
>>>>
>>>> a(isnan(a))=0
>>>>
>>>> sets to zero the entries where Nan is present.
>>>>
>>>> But be warned: Nans are *designed* to be propagated. That is, if 
>>>> your input data contains Nans, that means that some previous 
>>>> computations has already failed. The Nans should not be, in 
>>>> general, just ignored and thrown away.
>>>>
>>>> Best regards,
>>>>
>>>> Michaël Baudin
>>>>
>>>> Le 24/11/2010 10:11, Frederic Jourdin a écrit :
>>>>> Hi all !
>>>>> if I run this:
>>>>>
>>>>> a= [    1, %nan;    4,    4];
>>>>> b= [ %nan,    3;    3,    6];
>>>>> c= [    2,    2; %nan, %nan];
>>>>> min( a, b, c)
>>>>>
>>>>> Scilab returns the following matrix:
>>>>> NaN  NaN
>>>>> NaN  NaN
>>>>>
>>>>> while the expected matrix should be:
>>>>> 1  2
>>>>> 3  4
>>>>>
>>>>> Why?
>>>>>
>>>>> thanks
>>>>> Fred
>>>>>
>>>>> Scilab 5.3.0.beta3 on Linux
>>>>>
>>>>
>>>>
>>>
>>
>>
>
>
> -- 
> Michaël Baudin
> Ingénieur de développement
> michael.baudin at scilab.org
> -------------------------
> Consortium Scilab - Digiteo
> Domaine de Voluceau - Rocquencourt
> B.P. 105 - 78153 Le Chesnay Cedex
> Tel. : 01 39 63 56 87 - Fax : 01 39 63 55 94
>
>   




More information about the users mailing list