====== 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 "name" -- )| |[[2LITERAL]]|compiletime: ( x1 x2 -- ) Run-time: ( -- x1 x2 )| |[[2VARIABLE]]|( "name" -- ) ; d! d@ fehlen im ANS?| | |name Execution: ( -- a-addr )| |[[D+]]|( ud1 ud2 -- ud3 )| |[[D-]]|( ud1 ud2 -- ud3 )| |[[d-dot|D.]]|( d -- )| |[[d-dot-r|D.R]]|( d n -- )| |[[d0-less|D0<]]|( d -- flag )| |[[d0-equal|D0=]]|( xd -- flag )| |[[d2-star|D2*]]|( xd1 -- xd2 ) | |[[d2-slash|D2/]]|( xd1 -- xd2 ) | |[[d-less|D<]]|( d1 d2 -- flag )| |[[d-equal|D=]]|( xd1 xd2 -- flag )| |[[d-grater-s|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-star-slash|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-plus|M+]]|( ud1 n -- ud2 )| ==== Double-Number extension words ==== |[[2ROT]] | ( x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2 )| |[[du-less|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]] ---