[Raku] 如何進行複數四則運算
作者:gugod 發佈於: #rakulanRaku 語言中內建的 Complex
型別可用來處理複數。複數 $x
的虛數部分可直接以 i
來表示,與一般數學上的表示法沒有差太多。
my Complex $x = 4 + 2i;
say $x.WHAT;
#=> (Complex)
say $x;
#=> 4+2i
各數值運算算符在 Complex
型別上都有定義,可以直接把 $x
當做普通數值來用,也可與 Int
或 Rat
型別的數值相算:
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]
但可看到有浮點數誤差值混進來了。(嘆氣)
此外,由於四則運算規則類似,一定程度內可直接把複數系統拿來當做二維座標系統來用。似乎是個能小小偷吃步的手段。