7 #include "cl_integer.h"
14 const cl_I_div_t round2 (const cl_I& x, const cl_I& y)
18 // (DIVIDE (abs x) (abs y)) -> q,r
20 // Falls (r>s) oder (r=s und q ungerade),
21 // (d.h. falls r>abs(y)/2 oder r=abs(y)/2 und q ungerade),
22 // setze q:=q+1 und r:=-s (d.h. r:=r-abs(y)).
23 // {Nun ist abs(r) <= abs(y)/2, bei abs(r)=abs(y)/2 ist q gerade.}
24 // Falls x<0, setze r:=-r.
25 // Falls x,y verschiedene Vorzeichen haben, setze q:=-q.
27 var cl_I abs_y = abs(y);
28 var cl_I_div_t q_r = cl_divide(abs(x),abs_y);
29 var cl_I& q = q_r.quotient;
30 var cl_I& r = q_r.remainder;
31 var cl_I s = abs_y - r;
32 if ((r > s) || ((r == s) && oddp(q)))
33 { q = q + 1; r = - s; }
36 if (minusp(x) != minusp(y))