Benutzer-Werkzeuge

Webseiten-Werkzeuge


words:doubleext2_wordset

Dies ist eine alte Version des Dokuments!


double number words

Bitte hier Beispiele für die Implementation doppelt genauer Berechnungen ablegen.

Handy Reference Card

Im Gforth sind all diese Worte vorhanden.

Optional Double-Number Word Set

2CONSTANT( x1 x2 „<spaces>name“ – )
2LITERALcompiletime: ( x1 x2 – ) Run-time: ( – x1 x2 )
2VARIABLE( „<spaces>name“ – ) ; d! d@ fehlen im ANS?
name Execution: ( – a-addr )
D+( ud1 ud2 – ud3 )
D-( ud1 ud2 – ud3 )
D.( d – )
D.R( d n – )
D0<( d – flag )
D0=( xd – flag )
D2*( xd1 – xd2 )
D2/( xd1 – xd2 )
D<( d1 d2 – flag )
D=( xd1 xd2 – flag )
D>S( d – n )
DABS( d – ud )
DMAX( d1 d2 – d3 )
DMIN( d1 d2 – d3 ) \d3 is the lesser of d1 and d2.
DNEGATE ( d1 – d2 )
M*/( d1 n1 +n2 – d2 ) ohne rest; integer operation.
Multiply d1 by n1 producing the triple-cell intermediate result t.
Divide t by +n2 giving the double-cell quotient d2.
M+( ud1 n – ud2 )

Double-Number extension words

2ROT ( x1 x2 x3 x4 x5 x6 – x3 x4 x5 x6 x1 x2 )
DU< ( ud1 ud2 – flag )

More Double-Number Words

Seine Sammlung d-number.fs hat Luca Masini in der VD veröffentlich und freigegeben.

Memory

: d! ( d adr -- )  >r r@ cell + ! r> ! ; \ "d-store"
: d@ ( adr -- d )  >r r@ @ r> cell + @ ; \ "d-fetch"

Logic and shift words

: dand    ( d d -- d     ) rot and >r and r>       ;
: dinvert (   d -- d     ) swap invert swap invert ;
: dlshift ( d u -- d     ) 0 ?do d2* loop          ;
: dor     ( d d -- d     ) rot or  >r or  r>       ;
: dnot    (   d -- 0.|1. ) d0= abs s>d             ;
: drshift ( d u -- d     ) 0 ?do d2/ loop dabs     ;
: dxor    ( d d -- d     ) rot xor >r xor r>       ;

d* "d-star"

Dieses d* funktioniert auch auf 64-Bit-Maschinen richtig.

: d*     ( ud1 ud2 -- udprod )
  >r swap >r 2dup um*
  2swap r> * swap r> * + + ;

BTW: Obwohl der Stackeffekt hier „ud“ angibt, ist das Ergebnis auch für Faktoren mit Vorzeichen richtig (genauso wie bei * ), solange kein Überlauf stattfindet. (Danke Bernd)

Wie funktioniert das eigentlich? –> d-star-collection

words/doubleext2_wordset.1293642765.txt.gz · Zuletzt geändert: von 127.0.0.1