# What is the reasoning behind the fact that min(0,NaN) is 0?

29 views (last 30 days)
the cyclist on 21 May 2012
Edited: Stephen Cobeldick on 26 Apr 2020
I know that Mathworks pays a lot of attention to this stuff, so I am wondering why the expression
>> min(0,NaN)
is 0. Returning a NaN here seems more logical to me.
Stephen Cobeldick on 25 Apr 2020
@Bryan: you should make that as an enhancement request.
Another option is to stop relying on inconsistent "default" behavior and always specify any flags, dimensions, etc. for any function that has these kind of options. Although it requires a little more typing, it has the following advantages:
• makes the intention clear
• avoids bugs, e.g. when a matrix ony has one row (and thus min returns a scalar, not a row vector)
• throws an error on versions that do not support that option, rather than silently continuing...

Sean de Wolski on 21 May 2012
At the bottom of the doc page:
The min function ignores NaNs
##### 2 CommentsShowHide 1 older comment
Jan on 22 May 2012
It depends on how you understand the MIN function. 0 < NaN replies FALSE, but NaN < 0 replies FALSE also. As long as it is well documented, both values are reasonable.

Walter Roberson on 21 May 2012
If you initialize the result to inf, and then loop testing whether the current value is less than the result and replace the result if it is, then since NaN < any number is false, the result will never get replaced with NaN. You would have to add special code to return NaN in such a case.

Daniel Shub on 22 May 2012
Given the behavior of MIN, I find it odd that there is a NANMIN function.
##### 2 CommentsShowHide 1 older comment
per isakson on 21 Jun 2012
MIN and MAX ignores NaN. MEAN and SUM does not. I guess NANMIN (in stat toolbox) is for people like me who cannot remember all the details when we cannot see the underlying logic.

M Sohrabinia on 21 Jun 2012
NaN is considered undefined, so undefined is ignored by most functions (0/0 will be resulted in NaN which is basically undefined but any number divided by 0, say 4/0, will result in inf). However, the question is why Matlab has decided to treat NaNs in a certain way in some functions, e.g., sort function will always arrange NaNs at the top end (A to Z mode). I guess Matlab has just decided to adopt some rules to handle exceptions.