* Bug #6693 fixed - modulo did not accept polynomial inputs. Help page was not updated.
[scilab.git] / scilab / modules / elementary_functions / macros / modulo.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) 2012 - Scilab Enterprises - Adeline CARNIS
5 // 
6 // This file must be used under the terms of the CeCILL.
7 // This source file is licensed as described in the file COPYING, which
8 // you should have received as part of this distribution.  The terms
9 // are also available at
10 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11
12 function i = modulo(n, m)
13     //i=modulo(n,m) returns  n modulo m.
14
15     [lhs, rhs] = argn(0);
16     if rhs <> 2 then
17         error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"modulo", 2));
18     end
19
20     if and(typeof(n) <> ["constant", "polynomial"]) | ~isreal(n) then
21         error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "modulo", 1));
22     end
23
24     if typeof(m) <> "constant" & typeof(m) <> "polynomial" | ~isreal(m) then
25         error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "modulo", 2));
26     end
27
28     if typeof(m) =="constant" & typeof(n) =="constant" then
29         if size(n,'*')==1 then
30             i = zeros(m);
31             k = find(m==0);
32             i(k) = n - int(n ./ m(k)) .* m(k);
33             k = find(m~=0);
34             i(k) = n-int(n./m(k)).*m(k);
35         elseif size(m,'*')==1 then
36             i = zeros(n);
37             if m == 0 then
38                 i = n - int(n ./ m) .* m;
39             else
40                 i = n-int(n./m).*m;
41             end
42         else
43             if or(size(n) <> size(m)) then 
44                 error(msprintf(gettext("%s: Wrong size for input arguments: Same size expected.\n"),"modulo"));
45             end
46             i = zeros(n);
47             k = find(m==0);
48             i(k) = n(k) - int(n(k) ./ m(k)) .* m(k);
49             k = find(m~=0);
50             i(k) = n(k) - int(n(k)./m(k)).*m(k);
51         end
52     else
53         [i,q]=pdiv(n,m);
54     end
55 endfunction
56
57
58
59
60
61