pfe-complex-ext ? Complex floating point
R2P1 ?=>? ( | ) ; | ? |
"EXTENSIONS"
;T2P1 ?=>? ( | ) ; | ? |
"EXTENSIONS"
;LAMBDA/EPSILON ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z@ ( addr -- f: z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z! ( addr f: z -- ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;X@ ( zaddr -- f: x ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;X! ( zaddr f: x -- ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Y@ ( zaddr -- f: y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Y! ( zaddr f: x -- ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z. (f: z -- ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZS. (f: z -- ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;REAL (f: x y -- x ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;IMAG (f: x y -- y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;CONJG (f: x y -- x -y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZDROP (f: z -- ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZDUP (f: z -- z z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZSWAP (f: z1 z2 -- z2 z1 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZOVER (f: z1 z2 -- z1 z2 z1 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZNIP (f: z1 z2 -- z2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZTUCK (f: z1 z2 -- z2 z1 z2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZROT (f: z1 z2 z3 -- z2 z3 z1 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;-ZROT (f: z1 z2 z3 -- z3 z1 z2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z+ (f: z1 z2 -- z1+z2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z- (f: z1 z2 -- z1-z2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z* (f: x y u v -- x*u-y*v x*v+y*u ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z/ (f: u+iv z -- u/z+iv/z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZNEGATE (f: z -- -z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z2* (f: z -- z*2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z2/ (f: z -- z/2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;I* (f: x y -- -y x ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;-I* (f: x y -- y -x ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;1/Z (f: z -- 1/z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z^2 (f: z -- z^2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;|Z|^2 (f: x y -- |z|^2 ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z^N ( n f: z -- z^n ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;X+ (f: z a -- x+a y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;X- (f: z a -- x-a y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Y+ (f: z a -- x y+a ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Y- (f: z a -- x y-a ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z*F (f: x y f -- x*f y*f ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z/F (f: x y f -- x/f y/f ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;F*Z (f: f x y -- f*x f*y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;F/Z (f: f z -- f/z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z*I*F (f: z f -- z*if ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;-I*Z/F (f: z f -- z/[if] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;I*F*Z (f: f z -- if*z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;I*F/Z (f: f z -- [0+if]/z ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z*>REAL (f: z1 z2 -- Re[z1*z2] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z*>IMAG (f: z1 z2 -- Im[z1*z2] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;|Z| (f: x y -- |z| ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZBOX (f: z -- box[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ARG (f: z -- principal.arg[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;>POLAR (f: x y -- r theta ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;POLAR> (f: r theta -- x y ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZSSQS (f: z -- rho s: k ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZSQRT (f: z -- sqrt[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZLN (f: z -- ln|z|+i*theta ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZEXP (f: z -- exp[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;Z^ (f: x y u v -- [x+iy]^[u+iv] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZCOSH (f: z -- cosh[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZSINH (f: z -- sinh[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZTANH (f: z -- tanh[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZCOTH (f: z -- 1/tanh[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZCOS (f: z -- cosh[i*z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZSIN (f: z -- -i*sinh[i*z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZTAN (f: z -- -i*tanh[i*z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZCOT (f: z -- -i*coth[-i*z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZACOS (f: z -- u+iv=acos[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZACOSH (f: z -- u+iv=acosh[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZASIN (f: z -- u+iv=asin[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZASINH (f: z -- -i*asin[i*z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZATANH (f: z -- u+iv=atanh[z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZATAN (f: z -- -i*atanh[i*z] ) ?=>? ( | ) ; | ? |
"EXTENSIONS"
;ZLITERAL ?=>? ( | ) ; | ? |
"EXTENSIONS"
;
R2P1 - no description, sorry
T2P1 - no description, sorry
LAMBDA/EPSILON - no description, sorry
Z@ ( addr -- f: z ) => "EXTENSIONS"
Z! ( addr f: z -- ) => "EXTENSIONS"
X@ ( zaddr -- f: x ) => "EXTENSIONS"
X! ( zaddr f: x -- ) => "EXTENSIONS"
Y@ ( zaddr -- f: y ) => "EXTENSIONS"
Y! ( zaddr f: x -- ) => "EXTENSIONS"
Z. (f: z -- ) => "EXTENSIONS"
Emit the complex number, including the sign of zero when
signbit()
is available.
ZS. (f: z -- ) => "EXTENSIONS"
Emit the complex number in scientific notation, including the
sign of zero when signbit()
is available.
REAL (f: x y -- x ) => "EXTENSIONS"
IMAG (f: x y -- y ) => "EXTENSIONS"
CONJG (f: x y -- x -y ) => "EXTENSIONS"
ZDROP (f: z -- ) => "EXTENSIONS"
ZDUP (f: z -- z z ) => "EXTENSIONS"
ZSWAP (f: z1 z2 -- z2 z1 ) => "EXTENSIONS"
ZOVER (f: z1 z2 -- z1 z2 z1 ) => "EXTENSIONS"
ZNIP (f: z1 z2 -- z2 ) => "EXTENSIONS"
ZTUCK (f: z1 z2 -- z2 z1 z2 ) => "EXTENSIONS"
ZROT (f: z1 z2 z3 -- z2 z3 z1 ) => "EXTENSIONS"
-ZROT (f: z1 z2 z3 -- z3 z1 z2 ) => "EXTENSIONS"
Z+ (f: z1 z2 -- z1+z2 ) => "EXTENSIONS"
Z- (f: z1 z2 -- z1-z2 ) => "EXTENSIONS"
Z* (f: x y u v -- x*u-y*v x*v+y*u ) => "EXTENSIONS"
Uses the algorithm followed by JVN: (x+iy)*(u+iv) = [(x+y)*u - y*(u+v)] + i[(x+y)*u + x*(v-u)] Requires 3 multiplications and 5 additions.
Z/ (f: u+iv z -- u/z+iv/z ) => "EXTENSIONS"
Kahan-like algorithm *without* due attention to spurious over/underflows and zeros and infinities.
ZNEGATE (f: z -- -z ) => "EXTENSIONS"
Z2* (f: z -- z*2 ) => "EXTENSIONS"
Z2/ (f: z -- z/2 ) => "EXTENSIONS"
I* (f: x y -- -y x ) => "EXTENSIONS"
-I* (f: x y -- y -x ) => "EXTENSIONS"
1/Z (f: z -- 1/z ) => "EXTENSIONS"
Kahan algorithm *without* due attention to spurious over/underflows and zeros and infinities.
Z^2 (f: z -- z^2 ) => "EXTENSIONS"
Kahan algorithm without removal of any spurious NaN created by overflow. It deliberately uses (x-y)(x+y) instead of x^2-y^2 for the real part.
|Z|^2 (f: x y -- |z|^2 ) => "EXTENSIONS"
Z^N ( n f: z -- z^n ) => "EXTENSIONS"
X+ (f: z a -- x+a y ) => "EXTENSIONS"
X- (f: z a -- x-a y ) => "EXTENSIONS"
Y+ (f: z a -- x y+a ) => "EXTENSIONS"
Y- (f: z a -- x y-a ) => "EXTENSIONS"
Z*F (f: x y f -- x*f y*f ) => "EXTENSIONS"
Z/F (f: x y f -- x/f y/f ) => "EXTENSIONS"
F*Z (f: f x y -- f*x f*y ) => "EXTENSIONS"
F/Z (f: f z -- f/z ) => "EXTENSIONS"
Kahan algorithm *without* due attention to spurious over/underflows and zeros and infinities.
Z*I*F (f: z f -- z*if ) => "EXTENSIONS"
-I*Z/F (f: z f -- z/[if] ) => "EXTENSIONS"
I*F*Z (f: f z -- if*z ) => "EXTENSIONS"
I*F/Z (f: f z -- [0+if]/z ) => "EXTENSIONS"
Kahan algorithm *without* due attention to spurious over/underflows and zeros and infinities.
Z*>REAL (f: z1 z2 -- Re[z1*z2] ) => "EXTENSIONS"
Compute the real part of the complex product without computing the imaginary part. Recommended by Kahan to avoid gratuitous overflow or underflow signals from the unnecessary part.
Z*>IMAG (f: z1 z2 -- Im[z1*z2] ) => "EXTENSIONS"
Compute the imaginary part of the complex product without computing the real part.
|Z| (f: x y -- |z| ) => "EXTENSIONS"
ZBOX (f: z -- box[z] ) => "EXTENSIONS"
Defined *only* for zero and infinite arguments. This difffers
from Kahan's CBOX
[p. 198] by conserving signs when only
one of x or y is infinite, consistent with the other cases, and
with its use in his ARG
[p. 199].
ARG (f: z -- principal.arg[z] ) => "EXTENSIONS"
>POLAR (f: x y -- r theta ) => "EXTENSIONS"
Convert the complex number z to its polar representation, where theta is the principal argument.
POLAR> (f: r theta -- x y ) => "EXTENSIONS"
ZSSQS (f: z -- rho s: k ) => "EXTENSIONS"
Compute rho = |(x+iy)/2^k|^2, scaled to avoid overflow or underflow, and leave the scaling integer k. Kahan, p. 200.
ZSQRT (f: z -- sqrt[z] ) => "EXTENSIONS"
Compute the principal branch of the square root, with Re sqrt[z] >= 0. Kahan, p. 201.
ZLN (f: z -- ln|z|+i*theta ) => "EXTENSIONS"
Compute the principal branch of the complex natural
logarithm. The angle theta is the principal argument. This
code uses Kahan's algorithm for the scaled logarithm
CLOGS(z,J)
= ln(z*2^J), with J=0 and blind choices of the
threshholds T0, T1, and T2. Namely, T0 = 1/sqrt(2), T1 =
5/4, and T2 = 3;
ZEXP (f: z -- exp[z] ) => "EXTENSIONS"
Z^ (f: x y u v -- [x+iy]^[u+iv] ) => "EXTENSIONS"
Compute in terms of the principal argument of x+iy.
ZCOSH (f: z -- cosh[z] ) => "EXTENSIONS"
ZSINH (f: z -- sinh[z] ) => "EXTENSIONS"
ZTANH (f: z -- tanh[z] ) => "EXTENSIONS"
Kahan, p. 204, including his divide by zero signal
suppression for infinite values of tan()
. To quote the very
informative "=>'man math'" on our Darwin system about IEEE 754:
"Divide-by-Zero is signaled only when a function takes
exactly infinite values at finite operands."
ZCOTH (f: z -- 1/tanh[z] ) => "EXTENSIONS"
ZCOS (f: z -- cosh[i*z] ) => "EXTENSIONS"
ZSIN (f: z -- -i*sinh[i*z] ) => "EXTENSIONS"
ZTAN (f: z -- -i*tanh[i*z] ) => "EXTENSIONS"
ZCOT (f: z -- -i*coth[-i*z] ) => "EXTENSIONS"
ZACOS (f: z -- u+iv=acos[z] ) => "EXTENSIONS"
Kahan, p.202.
ZACOSH (f: z -- u+iv=acosh[z] ) => "EXTENSIONS"
Kahan, p.203.
ZASIN (f: z -- u+iv=asin[z] ) => "EXTENSIONS"
Kahan, p.203.
ZASINH (f: z -- -i*asin[i*z] ) => "EXTENSIONS"
Kahan, p. 203, couth.
ZATANH (f: z -- u+iv=atanh[z] ) => "EXTENSIONS"
Kahan, p. 203.
ZATAN (f: z -- -i*atanh[i*z] ) => "EXTENSIONS"
Kahan, p. 204, couth.
ZLITERAL - no description, sorry