* Bug #6693 fixed - modulo did not accept polynomial inputs. Help page was not updated.
[scilab.git] / scilab / modules / elementary_functions / macros / modulo.sci
index 099cab8..5322cb0 100644 (file)
@@ -1,57 +1,61 @@
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
-// Copyright (C) INRIA\r
-// Copyright (C) DIGITEO - 2011 - Allan CORNET\r
-// Copyright (C) 2012 - Scilab Enterprises - Adeline CARNIS\r
-// \r
-// This file must be used under the terms of the CeCILL.\r
-// This source file is licensed as described in the file COPYING, which\r
-// you should have received as part of this distribution.  The terms\r
-// are also available at\r
-// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt\r
-\r
-function i = modulo(n, m)\r
-    //i=modulo(n,m) returns  n modulo m.\r
-\r
-    [lhs, rhs] = argn(0);\r
-    if rhs <> 2 then\r
-        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"modulo", 2));\r
-    end\r
-\r
-    if and(typeof(n) <> ["constant", "polynomial"]) | ~isreal(n) then\r
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "modulo", 1));\r
-    end\r
-\r
-    if typeof(m) <> "constant" | ~isreal(m) then\r
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "modulo", 2));\r
-    end\r
-\r
-    if size(n,'*')==1 then\r
-        i = zeros(m);\r
-        k = find(m==0);\r
-        i(k) = n - int(n ./ m(k)) .* m(k);\r
-        k = find(m~=0);\r
-        i(k) = n-int(n./m(k)).*m(k);\r
-    elseif size(m,'*')==1 then\r
-        i = zeros(n);\r
-        if m == 0 then\r
-            i = n - int(n ./ m) .* m;\r
-        else\r
-            i = n-int(n./m).*m;\r
-        end\r
-    else\r
-        if or(size(n) <> size(m)) then \r
-            error(msprintf(gettext("%s: Wrong size for input arguments: Same size expected.\n"),"modulo"));\r
-        end\r
-        i = zeros(n);\r
-        k = find(m==0);\r
-        i(k) = n(k) - int(n(k) ./ m(k)) .* m(k);\r
-        k = find(m~=0);\r
-        i(k) = n(k) - int(n(k)./m(k)).*m(k);\r
-    end\r
-endfunction\r
-\r
-\r
-\r
-\r
-\r
-\r
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) INRIA
+// Copyright (C) DIGITEO - 2011 - Allan CORNET
+// Copyright (C) 2012 - Scilab Enterprises - Adeline CARNIS
+// 
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+function i = modulo(n, m)
+    //i=modulo(n,m) returns  n modulo m.
+
+    [lhs, rhs] = argn(0);
+    if rhs <> 2 then
+        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"modulo", 2));
+    end
+
+    if and(typeof(n) <> ["constant", "polynomial"]) | ~isreal(n) then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "modulo", 1));
+    end
+
+    if typeof(m) <> "constant" & typeof(m) <> "polynomial" | ~isreal(m) then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "modulo", 2));
+    end
+
+    if typeof(m) =="constant" & typeof(n) =="constant" then
+        if size(n,'*')==1 then
+            i = zeros(m);
+            k = find(m==0);
+            i(k) = n - int(n ./ m(k)) .* m(k);
+            k = find(m~=0);
+            i(k) = n-int(n./m(k)).*m(k);
+        elseif size(m,'*')==1 then
+            i = zeros(n);
+            if m == 0 then
+                i = n - int(n ./ m) .* m;
+            else
+                i = n-int(n./m).*m;
+            end
+        else
+            if or(size(n) <> size(m)) then 
+                error(msprintf(gettext("%s: Wrong size for input arguments: Same size expected.\n"),"modulo"));
+            end
+            i = zeros(n);
+            k = find(m==0);
+            i(k) = n(k) - int(n(k) ./ m(k)) .* m(k);
+            k = find(m~=0);
+            i(k) = n(k) - int(n(k)./m(k)).*m(k);
+        end
+    else
+        [i,q]=pdiv(n,m);
+    end
+endfunction
+
+
+
+
+
+