1 \ @(#) math.fth 98/01/26 1.2
\r
2 \ Extended Math routines
\r
6 \ Copyright 1994 3DO, Phil Burk, Larry Polansky, Devid Rosenboom
\r
8 \ The pForth software code is dedicated to the public domain,
\r
9 \ and any third party may reproduce, distribute and modify
\r
10 \ the pForth software code or any derivative works thereof
\r
11 \ without any compensation or license. The pForth software
\r
12 \ code is provided on an "as is" basis without any warranty
\r
13 \ of any kind, including, without limitation, the implied
\r
14 \ warranties of merchantability and fitness for a particular
\r
15 \ purpose and their equivalents under the laws of any jurisdiction.
\r
20 : FM/MOD { dl dh nn | dlp dhp nnp rem quo -- rem quo , floored }
\r
21 dl dh dabs -> dhp -> dlp
\r
23 dlp dhp nnp um/mod -> quo -> rem
\r
25 IF \ negative dividend
\r
27 IF \ negative divisor
\r
29 ELSE \ positive divisor
\r
34 quo 1+ negate -> quo
\r
38 ELSE \ positive dividend
\r
40 IF \ negative divisor
\r
45 nnp rem - negate -> rem
\r
46 quo 1+ negate -> quo
\r
53 : SM/REM { dl dh nn | dlp dhp nnp rem quo -- rem quo , symmetric }
\r
54 dl dh dabs -> dhp -> dlp
\r
56 dlp dhp nnp um/mod -> quo -> rem
\r
58 IF \ negative dividend
\r
61 IF \ positive divisor
\r
64 ELSE \ positive dividend
\r
66 IF \ negative divisor
\r
74 : /MOD ( a b -- rem quo )
\r
78 : MOD ( a b -- rem )
\r
82 : */MOD ( a b c -- rem a*b/c , use double precision intermediate value )
\r
86 : */ ( a b c -- a*b/c , use double precision intermediate value )
\r