Sujet : Re: Complex square root of -1 : zsqrt(-1)
De : mhx (at) *nospam* iae.nl (mhx)
Groupes : comp.lang.forthDate : 28. Aug 2024, 22:42:15
Autres entêtes
Organisation : novaBBS
Message-ID : <28fcb29094fab35007403391b3ea764e@www.novabbs.com>
References : 1 2 3 4 5 6 7 8 9
User-Agent : Rocksolid Light
On Wed, 28 Aug 2024 19:49:02 +0000, ahmed wrote:
Another definition for |z|
>
: |z| ( z: a+ib -- m) ( f: a b--m)
fover fabs fover fabs ( f: a b |a| |b|)
fmax ( f: a b mx)
frot frot ( f: mx a b)
fover fabs fover fabs fmax ( f: mx a b mx)
ftuck ( f: mx a mx b mx)
f/ ( f: mx a mx b/mx)
fdup f* frot frot ( f: mx [b/mx]^2 a mx)
f/ fdup f* f+ fsqrt f* ;
How about
: xpythag ( F: a b -- c ) \ compute sqrt(a^2+b^2) without overflow
FABS FSWAP FABS FSWAP
F2DUP F> IF FOVER ( F: a b a -- ) F/ FSQR F1+ FSQRT F* EXIT ENDIF
FDUP F0= IF 0e
ELSE FTUCK ( F: b a b -- ) F/ FSQR F1+ FSQRT F*
ENDIF ;
FORTH> 1e-309 0e xpythag +e. 1.0000000000000000000e-0309 ok
FORTH> 1e-319 0e xpythag +e. 9.9999999999999999992e-0320 ok
-marcel