1 /* j/1/div.c
2 **
3 */
4 #include "all.h"
5 
6 
7 /* functions
8 */
9   u3_noun
u3qa_div(u3_atom a,u3_atom b)10   u3qa_div(u3_atom a,
11            u3_atom b)
12   {
13     if ( 0 == b ) {
14       return u3m_bail(c3__exit);
15     }
16     else {
17       if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) {
18         return a / b;
19       }
20       else {
21         mpz_t a_mp, b_mp;
22 
23         u3r_mp(a_mp, a);
24         u3r_mp(b_mp, b);
25 
26         mpz_tdiv_q(a_mp, a_mp, b_mp);
27         mpz_clear(b_mp);
28 
29         return u3i_mp(a_mp);
30       }
31     }
32   }
33   u3_noun
u3wa_div(u3_noun cor)34   u3wa_div(u3_noun cor)
35   {
36     u3_noun a, b;
37 
38     if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ||
39          (c3n == u3ud(a)) ||
40          (c3n == u3ud(b)) )
41     {
42       return u3m_bail(c3__exit);
43     } else {
44       return u3qa_div(a, b);
45     }
46   }
47