version 1.52, 1996/02/13 11:12:18
|
version 1.53, 1996/02/26 16:52:46
|
Line 542 if (1%-3>0 && (d1<0) != (n1<0) && n2!=0)
|
Line 542 if (1%-3>0 && (d1<0) != (n1<0) && n2!=0)
|
n2+=n1; |
n2+=n1; |
} |
} |
#endif |
#endif |
|
: |
|
dup >r dup 0< IF negate >r dnegate r> THEN |
|
over 0< IF tuck + swap THEN |
|
um/mod |
|
r> 0< IF swap negate swap THEN ; |
|
|
sm/rem d1 n1 -- n2 n3 core s_m_slash_rem |
sm/rem d1 n1 -- n2 n3 core s_m_slash_rem |
""symmetric division: d1 = n3*n1+n2, sign(n2)=sign(d1) or 0"" |
""symmetric division: d1 = n3*n1+n2, sign(n2)=sign(d1) or 0"" |
Line 562 if (1%-3<0 && (d1<0) != (n1<0) && n2!=0)
|
Line 567 if (1%-3<0 && (d1<0) != (n1<0) && n2!=0)
|
: |
: |
over >r dup >r abs -rot |
over >r dup >r abs -rot |
dabs rot um/mod |
dabs rot um/mod |
r> 0< IF negate THEN |
r> r@ xor 0< IF negate THEN |
r> 0< IF swap negate swap THEN ; |
r> 0< IF swap negate swap THEN ; |
|
|
m* n1 n2 -- d core m_star |
m* n1 n2 -- d core m_star |
#ifdef BUGGY_LONG_LONG |
#ifdef BUGGY_LONG_LONG |
Line 595 u2 = ud%u1;
|
Line 600 u2 = ud%u1;
|
#endif |
#endif |
: |
: |
dup IF 0 (um/mod) THEN nip ; |
dup IF 0 (um/mod) THEN nip ; |
: (um/mod) ( ud ud--ud u) |
: (um/mod) ( ud ud -- ud u ) |
2dup >r >r dup 0< |
2dup >r >r dup 0< |
IF 2drop 0 |
IF 2drop 0 |
ELSE 2dup d+ (um/mod) 2* THEN |
ELSE 2dup d+ (um/mod) 2* THEN |
Line 621 d.hi = d1.hi + d2.hi + (d.lo<d1.lo);
|
Line 626 d.hi = d1.hi + d2.hi + (d.lo<d1.lo);
|
d = d1+d2; |
d = d1+d2; |
#endif |
#endif |
: |
: |
>r swap >r over 2/ over 2/ + >r over 1 and over 1 and + 2/ |
rot + >r tuck + swap over u> r> swap - ; |
r> + >r + r> 0< r> r> + swap - ; |
|
|
|
d- d1 d2 -- d double d_minus |
d- d1 d2 -- d double d_minus |
#ifdef BUGGY_LONG_LONG |
#ifdef BUGGY_LONG_LONG |