c84d32ce49556e5ac27a39429d05ed0f7635bd83
[scilab.git] / scilab / modules / overloading / macros / %r_r_r.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
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 s1=%r_r_r(s1,s2)
14     // %r_r_r(s1,s2) <=> s1/s2    for rationals
15     //!
16
17     [s1,s2]=sysconv(s1,s2),
18     [n,m]=size(s2("num"))
19     if n<>m then error(43),end
20     if n*m==1 then
21         s1=%r_m_r(s1,rlist(s2("den"),s2("num"),s2("dt")) ),
22     else
23         p=s2("num")
24         s2=s2("den")
25         for k=1:n
26             pp=lcm(s2(:,k))
27             for l=1:n;p(l,k)=p(l,k)*pdiv(pp,s2(l,k)),end
28             s1(:,k)=s1(:,k)*pp
29         end
30         s1=s1*invr(p)
31     end
32 endfunction