Double-Cell Words¶
forth¶
These words are in forth.
2drop¶
( d – )
Double drop
2swap¶
( d1 d2 – d2 d1 )
Double swap
2over¶
( d1 d2 – d1 d2 d1 )
Double over
2dup¶
( d1 – d1 d1 )
Double dup
2nip¶
( d1 d2 – d2 )
Double nip
2tuck¶
( d1 d2 – d2 d1 d2 )
Double tuck
2rot¶
( d1 d2 d3 – d2 d3 d1 )
Double rot
4dup¶
( d1 d2 – d1 d2 d1 d2 )
Quadruple dup
2r@¶
( R: d1 – d1 ) ( – d1 )
Read two cells from the top of the return stack.
d=¶
( d1 d2 – f )
Test for the equality of two double cells
d<>¶
( d1 d2 – f )
Test for the inequality of two double cells
du<¶
( ud1 ud2 – f )
Unsigned double less than
du>¶
( ud1 ud2 – f )
Unsigned double greater than
du>=¶
( ud1 ud2 – f )
Unsigned double greater than or equal
du<=¶
( ud1 ud2 – f )
Unsigned double less than or equal
d<¶
( nd1 nd2 – f )
Signed double less than
d>¶
( nd1 nd2 – f )
Signed double greater than
d>=¶
( nd1 nd2 – f )
Signed double greater than or equal
d<=¶
( nd1 nd2 – f )
Signed double less than or equal
d0=¶
( d – f )
Double equal to zero
d0<>¶
( d – f )
Double not equal to zero
d0<¶
( nd – f )
Double less than zero
d0>¶
( nd – f )
Double greater than zero
d0>=¶
( nd – f )
Double greater than or equal to zero
d0<=¶
( nd – f )
Double less than or equal to zero
dnegate¶
( nd1 – nd2 )
Negate a double cell
dabs¶
( nd – ud )
Double absolute value
dmin¶
( nd1 nd2 – nd1|nd2 )
Double minimum
dmax¶
( nd1 nd2 – nd1|nd2 )
Double maximum
d+¶
( d1 d2 – d3 )
Add two double cells
d-¶
( d1 d2 – d3 )
Subtract two double cells
um+¶
( u1 u2 – u3 carry )
Add with carry
um*¶
( u1 u2 – ud )
Multiply two unsigned 32-bit values to get an unsigned 64-bit value
m*¶
( n1 n2 – d )
Multiply two signed 32-bit values to get a signed 64-bit value
ud*¶
( ud1 ud2 – ud3 )
Unsigned multiply 64 * 64 = 64
d*¶
( nd1 nd2 – nd3 )
Signed multiply 64 * 64 = 64
*/¶
( n1 n2 n3 – n4 )
Multiply signed n1 and n2 to get double cell intermediate value, then divide it by n3 to get a single cell result
*/mod¶
( n1 n2 n3 – n4 n5 )
Multiply signed n1 and n2 to get double cell intermediate value, then divide it by n3 to get a single cell remainder n4 and quotient n5
u*/¶
( u1 u2 u3 – u4 )
Multiply unsigned u1 and u2 to get double cell intermediate value, then divide it by u3 to get a single cell result
u*/mod¶
( u1 u2 u3 – u4 u5 )
Multiply unsigned u1 and u2 to get double cell intermediate value, then divide it by u3 to get a single cell remainder u4 and quotient u5
um/mod¶
( ud u1 – u2 u3 )
Divide unsigned ud by u1 and get a single cell remainder u2 and quotient u3
m/mod¶
( nd n1 – n2 n3 )
Divide signed nd by n1 and get a single cell remainder n2 and quotient n3
ud/mod¶
( ud1 ud2 – ud3 ud4 )
Divide unsigned ud1 by ud2 and get double cell remainder ud3 and quotient ud4
d/mod¶
( nd1 nd2 – nd3 nd4 )
Divide signed nd1 by nd2 and get double cell remainder nd3 and quotient nd4
ud/¶
( ud1 ud2 – ud3 )
Divide unsigned two double cells and get a double cell quotient
d/¶
( nd1 nd2 – nd3 )
Divide signed two double cells and get a double cell quotient
f*¶
( d1 d2 – d3 )
Multiply two s31.32 fixed-point numbers. Note that overflow is possible, where then the sign will be wrong.
f/¶
( d1 d2 – d3 )
Divide two s31.32 fixed-point numbers. Note that overflow is possible, where then the sign will be wrong.
udm*¶
( d1 d2 – dl dh )
Multiply two 64-bit double-cell numbers into a single 128-bit quadruple-cell number.
fi**¶
( f1 u – f2 )
Exponentiation of an S31.32 fixed-point number by an unsigned integer
fmod¶
( f1 f2 – f3 )
Compute the symmetric modulus of two S31.32 S31.32 fixed-point numbers.
ceil¶
( f – n )
Get the ceiling of a fixed-point number as a single-cell number.
floor¶
( f – n )
Get the floor of a fixed-point number as a single-cell number.
round-half-up¶
( f – n )
Round a fixed-point number up to the nearest integer with half rounding up.
round-half-down¶
( f – n )
Round a fixed-point number down to the nearest integer with half rounding down.
round-half-zero¶
( f – n )
Round a fixed-point number to the nearest integer with half rounding towards zero.
round-half-away-zero¶
( f – n )
Round a fixed-point number to the nearest integer with half rounding away from zero.
round-half-even¶
( f – n )
Round a fixed-point number to the nearest integer with half rounding towards even.
round-half-odd¶
( f – n )
Round a fixed-point number to the nearest integer with half rounding towards even.
round-zero¶
( f – n )
Round a fixed-point number towards zero.
round-away-zero¶
( f – n )
Round a fixed-point number away from zero.
sqrt¶
( f1 – f2 )
Square root of an S31.32 fixed-point number
expm1¶
( f1 – f2 )
Calculate (e^x)-1 where x is an S31.32 fixed-point number
exp¶
( f1 – f2 )
Calculate e^x where x is an S31.32 fixed-point number
lnp1¶
( f1 – f2 )
Calculate ln(x + 1) where x is an S31.32 fixed-point number
ln¶
( f1 – f2 )
Calculate ln(x) where x is an S31.32 fixed-point number
f**¶
( fb fx – fb^x )
Calculate b^x where b and x are S31.32 fixed-point numbers
sin¶
( f1 – f2 )
Calculate sin(x) where x is an S31.32 fixed-point number
cos¶
( f1 – f2 )
Calculate cos(x) where x is an S31.32 fixed-point number
tan¶
( f1 – f2 )
Calculate tan(x) where x is an S31.32 fixed-point number
asin¶
( f1 – f2 )
Calculate asin(x) where x is an S31.32 fixed-point number
acos¶
( f1 – f2 )
Calculate acos(x) where x is an S31.32 fixed-point number
atan¶
( f1 – f2 )
Calculate atan(x) where x is an S31.32 fixed-point number
atan2¶
( fy fx – fangle )
Calculate the angle of any pair of x and y coordinates where they are all S31.32 fixed-point numbers
sinh¶
( f1 – f2 )
Calculate sinh(x) where x is an S31.32 fixed-point number
cosh¶
( f1 – f2 )
Calculate cosh(x) where x is an S31.32 fixed-point number
tanh¶
( f1 – f2 )
Calculate tanh(x) where x is an S31.32 fixed-point number
asinh¶
( f1 – f2 )
Calculate asinh(x) where x is an S31.32 fixed-point number
acosh¶
( f1 – f2 )
Calculate acosh(x) where x is an S31.32 fixed-point number
atanh¶
( f1 – f2 )
Calculate atanh(x) where x is an S31.32 fixed-point number