[Raku] 如何進行複數四則運算

作者:   發佈於:   #rakulan

Raku 語言中內建的 Complex 型別可用來處理複數。複數 $x 的虛數部分可直接以 i 來表示,與一般數學上的表示法沒有差太多。

my Complex $x = 4 + 2i;

say $x.WHAT;
#=> (Complex)

say $x;
#=> 4+2i

各數值運算算符在 Complex 型別上都有定義,可以直接把 $x 當做普通數值來用​,也可與 IntRat 型別的數值相算:

my Complex $x = 4 + 2i;

say $x - 24; #=> -20+2i
say $x * (1-i); #=> 6-2i

實數部與虛數部也可個別取出

my Complex $x = 4 - 3i;

say $x.re; #=> 4
say $x.im; #=> -3

無理數函式也是有支援的:

say sqrt($x);  #=> 2.0581710272714924+0.48586827175664576i
say $x.sqrt;   # 同上
say cos($x) - sin($x); #=> 0.3881038729314441+5.115491176144156i

Int 數值做 roots(2) 則可用來取得負數數值的兩個平方根解

my Int $n = -1;
my @r = $n.roots(2);

say @r;
#=> [6.123233995736766e-17+1i -1.8369701987210297e-16-1i]

但可看到有浮點數誤差值混進來了。(嘆氣)

此外,由於四則運算規則類似,一定程度內可直接把複數系統拿來當做二維座標系統來用。似乎是個能小小偷吃步的手段。