include mini-oof.fs
: 2fdup ( f1 f2 -- f1 f2 f1 f2 ) fover fover ;
: -frot ( f1 f2 f3 -- f3 f1 f2 ) frot frot ;
: 2f/ ( f1 f2 f3 f4 -- f1/f3 f2/f4 )
frot fswap f/ -frot f/ fswap ;
object class
method init
method conjugate
method modulus
method complex>string
float% field real
float% field imag
end-class complex
:noname ( r i -- ) dup imag f! real f! ; complex defines init
:noname ( -- c )
dup real f@ imag f@ -1e f*
complex new dup init ; complex defines conjugate
:noname ( -- f )
dup
real f@ fdup f*
imag f@ fdup f*
f+ fsqrt ; complex defines modulus
: complex+ ( c c -- c )
2dup
real f@ real f@ f+
imag f@ imag f@ f+
complex new dup init ;
: complex- ( c c -- c )
2dup
real f@ real f@ fswap f-
imag f@ imag f@ fswap f-
complex new dup init ;
: complex* ( c c -- c )
2dup
2dup real f@ real f@ f* imag f@ imag f@ f* f-
2dup real f@ imag f@ f* imag f@ real f@ f* f+
complex new dup init ;
: complex/ ( c c -- c )
tuck
conjugate complex*
dup real f@ imag f@
modulus fdup f* fdup 2f/
complex new dup init ;
complex new constant t1
complex new constant t2
3e 5e t1 init
8e -1e t2 init
: complex. ( c -- )
dup real f@ f. imag f@ f. ;
." + " t1 t2 complex+ complex. cr
." - " t1 t2 complex- complex. cr
." * " t1 t2 complex* complex. cr
." / " t1 t2 complex/ complex. cr
." modulo " t1 modulus f. cr
bye
aW5jbHVkZSBtaW5pLW9vZi5mcwo6IDJmZHVwICggZjEgZjIgLS0gZjEgZjIgZjEgZjIgKSBmb3ZlciBmb3ZlciA7CjogLWZyb3QgKCBmMSBmMiBmMyAtLSBmMyBmMSBmMiApIGZyb3QgZnJvdCA7CjogMmYvICggZjEgZjIgZjMgZjQgLS0gZjEvZjMgZjIvZjQgKQogIGZyb3QgZnN3YXAgZi8gLWZyb3QgZi8gZnN3YXAgOwogCm9iamVjdCBjbGFzcwogIG1ldGhvZCBpbml0CiAgbWV0aG9kIGNvbmp1Z2F0ZQogIG1ldGhvZCBtb2R1bHVzCiAgbWV0aG9kIGNvbXBsZXg+c3RyaW5nCiAgZmxvYXQlIGZpZWxkIHJlYWwKICBmbG9hdCUgZmllbGQgaW1hZwplbmQtY2xhc3MgY29tcGxleAogCjpub25hbWUgKCByIGkgLS0gKSBkdXAgaW1hZyBmISByZWFsIGYhIDsgY29tcGxleCBkZWZpbmVzIGluaXQKOm5vbmFtZSAoIC0tIGMgKQogIGR1cCByZWFsIGZAIGltYWcgZkAgLTFlIGYqCiAgY29tcGxleCBuZXcgZHVwIGluaXQgOyBjb21wbGV4IGRlZmluZXMgY29uanVnYXRlCjpub25hbWUgKCAtLSBmICkgCiAgZHVwCiAgcmVhbCBmQCBmZHVwIGYqCiAgaW1hZyBmQCBmZHVwIGYqCiAgZisgZnNxcnQgOyBjb21wbGV4IGRlZmluZXMgbW9kdWx1cwogIAo6IGNvbXBsZXgrICggYyBjIC0tIGMgKQogIDJkdXAKICByZWFsIGZAIHJlYWwgZkAgZisgCiAgaW1hZyBmQCBpbWFnIGZAIGYrCiAgY29tcGxleCBuZXcgZHVwIGluaXQgOwo6IGNvbXBsZXgtICggYyBjIC0tIGMgKQogIDJkdXAKICByZWFsIGZAIHJlYWwgZkAgZnN3YXAgZi0KICBpbWFnIGZAIGltYWcgZkAgZnN3YXAgZi0KICBjb21wbGV4IG5ldyBkdXAgaW5pdCA7CjogY29tcGxleCogKCBjIGMgLS0gYyApCiAgMmR1cAogIDJkdXAgcmVhbCBmQCByZWFsIGZAIGYqIGltYWcgZkAgaW1hZyBmQCBmKiBmLQogIDJkdXAgcmVhbCBmQCBpbWFnIGZAIGYqIGltYWcgZkAgcmVhbCBmQCBmKiBmKwogIGNvbXBsZXggbmV3IGR1cCBpbml0IDsKOiBjb21wbGV4LyAoIGMgYyAtLSBjICkKICB0dWNrCiAgY29uanVnYXRlIGNvbXBsZXgqCiAgZHVwIHJlYWwgZkAgaW1hZyBmQAogIG1vZHVsdXMgZmR1cCBmKiBmZHVwIDJmLyAKICBjb21wbGV4IG5ldyBkdXAgaW5pdCA7CiAgCmNvbXBsZXggbmV3IGNvbnN0YW50IHQxCmNvbXBsZXggbmV3IGNvbnN0YW50IHQyCjNlIDVlIHQxIGluaXQKOGUgLTFlIHQyIGluaXQKIAo6IGNvbXBsZXguICggYyAtLSApCiAgZHVwIHJlYWwgZkAgZi4gaW1hZyBmQCBmLiA7CiAKLiIgKyAiIHQxIHQyIGNvbXBsZXgrIGNvbXBsZXguIGNyCi4iIC0gIiB0MSB0MiBjb21wbGV4LSBjb21wbGV4LiBjcgouIiAqICIgdDEgdDIgY29tcGxleCogY29tcGxleC4gY3IKLiIgLyAiIHQxIHQyIGNvbXBsZXgvIGNvbXBsZXguIGNyCi4iIG1vZHVsbyAiIHQxIG1vZHVsdXMgZi4gY3IKYnll