is Cool does Numeric
表示复平面上的一个数。
Complex 对象是不可变的。
运算符§
后缀 i§
在数字字面量后面添加 i
将使其成为 Complex,例如
say 2i; # same as Complex.new(0, 2);say 1-2e3i; # same as Complex.new(1, -2e3);
方法§
method new§
multi method new(Real , Real --> Complex)
从实部和虚部创建一个新的Complex
对象。
my = Complex.new(1, 1);say ; # OUTPUT: «1+1i»
在没有参数的情况下创建时,两个部分都被认为是零。
say Complex.new; # OUTPUT: «0+0i»
方法 re§
method re(Complex: --> Real)
返回复数的实部。
say (3+5i).re; # OUTPUT: «3»
方法 im§
method im(Complex: --> Real)
返回复数的虚部。
say (3+5i).im; # OUTPUT: «5»
方法 reals§
method reals(Complex: --> Positional)
返回一个包含此值的实部和虚部的两个元素列表。
say (3+5i).reals; # OUTPUT: «(3 5)»
方法 isNaN§
method isNaN(Complex: --> Bool)
如果实部或虚部是NaN
(非数字),则返回 true。
say (NaN+5i).isNaN; # OUTPUT: «True»say (7+5i).isNaN; # OUTPUT: «False»
方法 polar§
method polar(Complex: --> Positional)
返回此值的极坐标的两个元素列表,即幅度和以弧度表示的角度。
say (10+7i).polar; # OUTPUT: «(12.2065556157337 0.610725964389209)»
方法 floor§
method floor(Complex: --> Complex)
返回self.re.floor + self.im.floor
。也就是说,实部和虚部都四舍五入到不超过该部分值的最高整数。
say (1.2-3.8i).floor; # OUTPUT: «1-4i»
方法 ceiling§
method ceiling(Complex: --> Complex)
返回self.re.ceiling + self.im.ceiling
。也就是说,实部和虚部都四舍五入到不小于该部分值的最低整数。
say (1.2-3.8i).ceiling; # OUTPUT: «2-3i»
例程 sign§
method sign(Complex: --> Complex)multi sign(Complex --> Complex)
如果复数的绝对值为 0,则返回0i
。否则返回复数除以其绝对值(与 $z 相同方向的单位复数)。
从 6.e 语言版本开始可用(Rakudo 编译器 2023.02+ 中存在早期实现)。
方法 round§
multi method round(Complex: --> Complex)multi method round(Complex: Real() --> Complex)
如果没有参数,则将实部和虚部都四舍五入到最接近的整数,并返回一个新的Complex
数字。如果给出$scale
,则将调用者的两个部分都四舍五入到$scale
的最接近的倍数。对数字的每个部分使用与Real.round相同的算法。
say (1.2-3.8i).round; # OUTPUT: «1-4i»say (1.256-3.875i).round(0.1); # OUTPUT: «1.3-3.9i»
方法 truncate§
method truncate(Complex: --> Complex)
使用Real.truncate删除数字的实部和虚部的分数部分,并将结果作为新的Complex
返回。
say (1.2-3.8i).truncate; # OUTPUT: «1-3i»
例程 abs§
method abs(Complex: --> Num)multi abs(Complex --> Num)
返回调用者(或子形式中的参数)的绝对值。对于给定的复数$z
,绝对值|$z|
定义为sqrt($z.re * $z.re + $z.im * $z.im)
。
say (3+4i).abs; # OUTPUT: «5»# sqrt(3*3 + 4*4) == 5
方法 conj§
method conj(Complex: --> Complex)
返回调用者的复共轭(即虚部符号取反的数字)。
say (1-4i).conj; # OUTPUT: «1+4i»
方法 sqrt§
method sqrt(Complex: --> Complex)
返回调用者的复平方根,即实部≥0且虚部与调用者的虚部符号相同的根。
say (3-4i).sqrt; # OUTPUT: «2-1i»say (-3+4i).sqrt; # OUTPUT: «1+2i»
方法 gist§
method gist(Complex: --> Str)
返回形式为“1+2i”的字符串表示,没有内部空格。(Str 强制转换也返回此值。)
say (1-4i).gist; # OUTPUT: «1-4i»
方法 raku§
method raku(Complex: --> Str)
返回一个特定于实现的字符串,该字符串在传递给EVAL时会生成一个等效的对象。
say (1-3i).raku; # OUTPUT: «<1-3i>»
方法 Real§
multi method Real(Complex: --> Num)multi method Real(Complex: --> Num)
将调用者强制转换为Num
。如果虚部不近似为零,则强制转换将失败,并显示X::Numeric::Real
。
:D
变体返回该强制转换的结果。:U
变体会发出有关在数字上下文中使用未初始化值的警告,然后返回值0e0
。
子运算符:<**>§
multi infix:<**>(Complex \a, Complex \b --> Complex)multi infix:<**>(Num(Real) \a, Complex \b --> Complex)multi infix:<**>(Complex \a, Num(Real) \b --> Complex)
指数运算符 将第二个参数强制转换为 Complex
,并计算左侧参数的右侧参数次方。 从 6.d 版本开始,两个参数都可以等于零。
say i ** i; # OUTPUT: «0.20787957635076193+0i»say 2 ** i; # OUTPUT: «0.7692389013639721+0.6389612763136348i»say i ** 2; # OUTPUT: «-1+1.2246467991473532e-16i»say 0 ** i; # OUTPUT: «0+0i»say 0i ** 0i; # OUTPUT: «1+0i»