|
DIVN
by
Ricardo F. Lopes
|
|
A code to divide a number to n places using integer maths.
You can download the wav, Ace, tap files from the archive |
|
Division a/b with n decimal places using integer arithmetic.
Algorithm:
________________
x = a/b
a = a - b*x
print x.
loop from 1 to n:
a = 10*a
x = a/b
a = a - b*x
print x
end loop
_________________
ACE Forth Implementation:
( Usage example: )
( Divide 22 by 7 with 20 digits precision )
( 22 7 20 /N )
( Avoid negative numbers or numbers with )
( more then 3 digits )
: BS ( backspace )
15388 @ 1- 15388 !
;
: X ( b a -- b a' x , x=a/b and a'=a-b*x )
OVER OVER OVER ( b a b a b )
/ ( b a b x )
DUP >R ( b a b x )
* - R> ( b a' x )
;
: /N ( a b n -- )
CR
SWAP ROT ( n b a )
X . BS ( print integer part )
ASCII . EMIT ( decimal separator )
ROT 0 ( b a n 0 )
DO ( print n fractional digits )
10 * ( 10*a )
X ASCII 0 + EMIT ( print one digit )
LOOP
DROP DROP CR
;
|
|