* Bug 10078 fixed: isinf(polynomials) was not reliable
[scilab.git] / scilab / modules / elementary_functions / macros / isinf.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) 2012 - 2016 - Scilab Enterprises
4 // Copyright (C) 2016, 2019 - Samuel GOUGEON
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function r = isinf(x)
14     rhs = argn(2);
15
16     if rhs <> 1 then
17         msg = _("%s: Wrong number of input argument(s): %d expected.\n")
18         error(msprintf(msg, "isinf", 1))
19     end
20
21     if x==[] then
22         r = []
23     else
24         select typeof(x)
25         case "polynomial"
26             // polynomials : http://bugzilla.scilab.org/10078
27             r = matrix(or(isinf(coeff(x(:))),"c"), size(x))
28         case "rational"
29             msg = _("%s: Argument #%d: %s not supported.\n")
30             error(msprintf(msg, "isinf", 1, "rationals"))
31             // Possible implementation: a rational is inf if at least
32             // one coefficient of its numerator is infinite
33         else
34             if isreal(x)
35                 r = abs(x)==%inf;
36             else
37                 // workaround of http://bugzilla.scilab.org/14062
38                 r = abs(real(x))==%inf | abs(imag(x))==%inf
39             end
40         end
41     end
42 endfunction