* Bug #14649 fixed: isnan(complex(%inf, %inf)) was %F while phase is NaN
[scilab.git] / scilab / modules / elementary_functions / macros / isnan.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) DIGITEO - 2011 - Allan CORNET
4 // Copyright (C) 2016 - Samuel GOUGEON
5 //
6 // Copyright (C) 2012 - 2016 - Scilab Enterprises
7 //
8 // This file is hereby licensed under the terms of the GNU GPL v2.0,
9 // pursuant to article 5.3.4 of the CeCILL v.2.1.
10 // This file was originally licensed under the terms of the CeCILL v2.1,
11 // and continues to be available under such terms.
12 // For more information, see the COPYING file which you should have received
13 // along with this program.
14
15 function r = isnan(x)
16     rhs = argn(2);
17     if rhs <> 1 then
18         msg = gettext("%s: Wrong number of input argument(s): %d expected.\n")
19         error(msprintf(msg, "isnan", 1));
20     end
21     if x == [] then
22         r = [];
23     else
24         if or(type(x)==[1 5])   // for dense and sparse decimal encodings
25             if isreal(x)
26                 r = (x ~= x);
27             else
28                 rp = real(x)
29                 ip = imag(x)
30                 r = (x~=x | (abs(real(x))==%inf & abs(imag(x))==%inf) )
31             end
32         else
33             r = ~(x == x);
34             // the case of polynomials will be better managed apart,
35             // after merging this first fix for complex numbers
36         end
37     end
38 endfunction