math.txt

\ *********************************************************************
\                                                                     *
\    Filename:      math.txt                                          *
\    Date:          14.9.2011   (11-Jun-2013 PJ edits from PZ)        *
\    FF Version:    3.8                                               *
\    Copyright:     Mikael Nordman                                    *
\    Author:        Mikael Nordman                                    *
\ *********************************************************************
\    FlashForth is licensed acording to the GNU General Public License*
\ *********************************************************************
\ Double and mixed math words

: m* ( n1 n2 -- d )  \ signed 16*16->32 multiply
  2dup xor >r
  abs swap abs um*
  r> ?dnegate
;

: sm/rem ( d1 n1 -- n2 n3 )
  2dup xor >r
  over >r
  abs >r dabs r> um/mod
  swap r> ?negate
  swap r> ?negate
;

: fm/mod ( d1 n1 -- n2 n3 )
  dup >r
  2dup xor >r
  >r
  dabs r@ abs um/mod
  swap r> ?negate swap
  r> 0< if
    negate
    over if
      r@ rot - swap 1-
    then
  then
  r> drop
;

: /mod ( n1 n2 -- n3 n4 )
  >r s>d r> sm/rem
;

: mod ( n1 n2 -- n3 )
  /mod drop
;

: */mod ( n1 n2 n3 -- n4 n5 )
  >r m* r> sm/rem
;

: */ ( n1 n2 n3 -- quotient )
  */mod swap drop
;



Peter Jacobs 2013-06-12