Você sempre pode definir números complexos como uma matriz de dois números (a parte real e a parte imaginária). Você precisaria definir todos os operadores aritméticos manualmente:
function cset(x, real, imaginary) {
x["real"] = real
x["imaginary"] = imaginary
}
function cadd(n1, n2, result) {
result["real"] = n1["real"] + n2["real"]
result["imaginary"] = n1["imaginary"] + n2["imaginary"]
}
function cmult(n1, n2, result) {
result["real"] = n1["real"] * n2["real"] - n1["imaginary"] * n2["imaginary"]
result["imaginary"] = n1["real"] * n2["imaginary"] + n2["real"] * n1["imaginary"]
}
function c2a(x, tmp) {
if (x["real"]) {
tmp = x["real"]
if (x["imaginary"] > 0) tmp = tmp "+"
}
if (x["imaginary"]) {
if (x["imaginary"] == -1) tmp = tmp "-i"
else if (x["imaginary"] == 1) tmp = tmp "i"
else tmp = tmp x["imaginary"] "i"
}
if (tmp == "") tmp = "0"
return "(" tmp ")"
}
BEGIN {
cset(i, 0, 1)
cmult(i, i, i2)
printf "%s * %s = %s\n", c2a(i), c2a(i), c2a(i2)
cset(x, 1, 2)
cset(y, 0, 4)
cadd(x, y, xy)
printf "%s + %s = %s\n", c2a(x), c2a(y), c2a(xy)
}
Qual seria a saída:
(i) * (i) = (-1)
(1+2i) + (4i) = (1+6i)
Para idiomas com suporte nativo para números complexos, consulte:
-
python
:$ python -c 'print(1j*1j)' (-1+0j)
-
octave
:$ octave --eval 'i*i' ans = -1
-
calc
(apcalc
package no Debian):$ calc '1i * 1i' -1
-
R
:$ $ Rscript -e '1i*1i' [1] -1+0i